diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..95d8dbd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/libvirt-4.5.0.tar.xz
diff --git a/.libvirt.metadata b/.libvirt.metadata
new file mode 100644
index 0000000..3fedbbb
--- /dev/null
+++ b/.libvirt.metadata
@@ -0,0 +1 @@
+5f097d246c0fba04d18ac7ec951ad56ffa1a8958 SOURCES/libvirt-4.5.0.tar.xz
diff --git a/SOURCES/libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch b/SOURCES/libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch
new file mode 100644
index 0000000..a32bf30
--- /dev/null
+++ b/SOURCES/libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch
@@ -0,0 +1,35 @@
+From 74b69d4a7240c601fcd12c18d5e8d95d641ae922 Mon Sep 17 00:00:00 2001
+Message-Id: <74b69d4a7240c601fcd12c18d5e8d95d641ae922@dist-git>
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
+Date: Mon, 22 Feb 2016 12:51:51 +0100
+Subject: [PATCH] RHEL: Add rhel machine types to qemuDomainMachineNeedsFDC
+
+RHEL-only.
+
+pc-q35-rhel7.0.0 and pc-q35-rhel7.1.0 do not need an explicit
+isa-fdc controller.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1227880
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_domain.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 4c15d5a36a..4c2a162b85 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -9239,6 +9239,9 @@ qemuDomainMachineNeedsFDC(const char *machine)
+             STRPREFIX(p, "2.2") ||
+             STRPREFIX(p, "2.3"))
+             return false;
++        if (STRPREFIX(p, "rhel7.0.0") ||
++            STRPREFIX(p, "rhel7.1.0"))
++            return false;
+         return true;
+     }
+     return false;
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch b/SOURCES/libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch
new file mode 100644
index 0000000..449b106
--- /dev/null
+++ b/SOURCES/libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch
@@ -0,0 +1,46 @@
+From 72c5455c00fcec50bae3e71a6fbd6330e524be0a Mon Sep 17 00:00:00 2001
+Message-Id: <72c5455c00fcec50bae3e71a6fbd6330e524be0a@dist-git>
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
+Date: Mon, 27 Aug 2018 13:09:38 +0200
+Subject: [PATCH] RHEL: Fix virConnectGetMaxVcpus output
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1092363
+
+RHEL-only.
+
+Ignore the maximum vcpu limit (KVM_CAP_MAX_VCPUS) on RHEL,
+since RHEL QEMU treats the recommended limit (KVM_CAP_NR_VCPUS)
+as the maximum, see:
+https://bugzilla.redhat.com/show_bug.cgi?id=998708
+
+(cherry picked from commit 7dff909fa34bdd93ad200dbffe70c0c1ee931925)
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1582222
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+---
+ src/util/virhostcpu.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
+index 1e31be5900..effe04ca3a 100644
+--- a/src/util/virhostcpu.c
++++ b/src/util/virhostcpu.c
+@@ -1186,6 +1186,11 @@ virHostCPUGetKVMMaxVCPUs(void)
+         return -1;
+     }
+ 
++/* Ignore KVM_CAP_MAX_VCPUS on RHEL - the recommended maximum
++ * is treated as a hard limit.
++ */
++# undef KVM_CAP_MAX_VCPUS
++
+ # ifdef KVM_CAP_MAX_VCPUS
+     /* at first try KVM_CAP_MAX_VCPUS to determine the maximum count */
+     if ((ret = ioctl(fd, KVM_CHECK_EXTENSION, KVM_CAP_MAX_VCPUS)) > 0)
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch b/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch
new file mode 100644
index 0000000..69fece3
--- /dev/null
+++ b/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch
@@ -0,0 +1,165 @@
+From 498389f6b88547c352add4b209d61896a5143c00 Mon Sep 17 00:00:00 2001
+Message-Id: <498389f6b88547c352add4b209d61896a5143c00@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Fri, 27 Mar 2015 12:48:40 +0100
+Subject: [PATCH] RHEL: Hack around changed Broadwell/Haswell CPUs
+
+RHEL-only
+
+Upstream tried to solve the change of Broadwell and Haswell CPUs by
+removing rtm and hle features from the corresponding CPU models for new
+machine types. Then they reverted this and introduced new *-noTSX models
+instead. However, the original fix was backported to RHEL.
+
+This patch makes sure Broadwell and Haswell will always contain rtm and
+hle features regardless on RHEL version or machine type used.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1199446
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_command.c                       | 29 +++++++++++++++++++
+ tests/qemuxml2argvdata/cpu-Haswell.args       |  2 +-
+ .../qemuxml2argvdata/cpu-host-model-cmt.args  |  3 +-
+ tests/qemuxml2argvdata/cpu-tsc-frequency.args |  2 +-
+ tests/qemuxml2argvdata/q35-acpi-nouefi.args   |  2 +-
+ tests/qemuxml2argvdata/q35-acpi-uefi.args     |  2 +-
+ tests/qemuxml2argvdata/q35-noacpi-nouefi.args |  2 +-
+ 7 files changed, 36 insertions(+), 6 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 4fc3176ad3..c1eefca639 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -6677,6 +6677,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+     size_t i;
+     virCapsPtr caps = NULL;
+     virCPUDefPtr cpu = def->cpu;
++    bool hle = false;
++    bool rtm = false;
+ 
+     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
+         goto cleanup;
+@@ -6734,6 +6736,11 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+         virBufferAsprintf(buf, ",vendor=%s", cpu->vendor_id);
+ 
+     for (i = 0; i < cpu->nfeatures; i++) {
++        if (STREQ("rtm", cpu->features[i].name))
++            rtm = true;
++        if (STREQ("hle", cpu->features[i].name))
++            hle = true;
++
+         switch ((virCPUFeaturePolicy) cpu->features[i].policy) {
+         case VIR_CPU_FEATURE_FORCE:
+         case VIR_CPU_FEATURE_REQUIRE:
+@@ -6757,6 +6764,28 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+         }
+     }
+ 
++    /* Some versions of qemu-kvm in RHEL provide Broadwell and Haswell CPU
++     * models which lack rtm and hle features when used with some machine
++     * types. Let's make sure Broadwell and Haswell will always have these
++     * features. But only if the features were not explicitly mentioned in
++     * the guest CPU definition.
++     */
++    if (STREQ_NULLABLE(cpu->model, "Broadwell") ||
++        STREQ_NULLABLE(cpu->model, "Haswell")) {
++        if (!rtm) {
++            if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION))
++                virBufferAddLit(buf, ",rtm=on");
++            else
++                virBufferAddLit(buf, ",+rtm");
++        }
++        if (!hle) {
++            if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION))
++                virBufferAddLit(buf, ",hle=on");
++            else
++                virBufferAddLit(buf, ",+hle");
++        }
++    }
++
+     ret = 0;
+  cleanup:
+     virObjectUnref(caps);
+diff --git a/tests/qemuxml2argvdata/cpu-Haswell.args b/tests/qemuxml2argvdata/cpu-Haswell.args
+index c7ce396d05..6f20359524 100644
+--- a/tests/qemuxml2argvdata/cpu-Haswell.args
++++ b/tests/qemuxml2argvdata/cpu-Haswell.args
+@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \
+ -name QEMUGuest1 \
+ -S \
+ -machine pc,accel=kvm,usb=off,dump-guest-core=off \
+--cpu Haswell \
++-cpu Haswell,+rtm,+hle \
+ -m 214 \
+ -smp 6,sockets=6,cores=1,threads=1 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+diff --git a/tests/qemuxml2argvdata/cpu-host-model-cmt.args b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
+index 8767278d11..d236aa9e09 100644
+--- a/tests/qemuxml2argvdata/cpu-host-model-cmt.args
++++ b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
+@@ -9,7 +9,8 @@ QEMU_AUDIO_DRV=none \
+ -S \
+ -machine pc,accel=tcg,usb=off,dump-guest-core=off \
+ -cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\
+-+smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm \
+++smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+rtm,\
+++hle \
+ -m 214 \
+ -smp 6,sockets=6,cores=1,threads=1 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+diff --git a/tests/qemuxml2argvdata/cpu-tsc-frequency.args b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
+index 7824dea96f..216fd43014 100644
+--- a/tests/qemuxml2argvdata/cpu-tsc-frequency.args
++++ b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
+@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \
+ -machine pc,accel=kvm,usb=off,dump-guest-core=off \
+ -cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\
+ +smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,\
+-+invtsc,tsc-frequency=3504000000 \
+++invtsc,+rtm,+hle,tsc-frequency=3504000000 \
+ -m 214 \
+ -smp 1,sockets=1,cores=1,threads=1 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+diff --git a/tests/qemuxml2argvdata/q35-acpi-nouefi.args b/tests/qemuxml2argvdata/q35-acpi-nouefi.args
+index caef49ea16..a9375a35db 100644
+--- a/tests/qemuxml2argvdata/q35-acpi-nouefi.args
++++ b/tests/qemuxml2argvdata/q35-acpi-nouefi.args
+@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \
+ -name guest \
+ -S \
+ -machine q35,accel=tcg,usb=off,dump-guest-core=off \
+--cpu Haswell \
++-cpu Haswell,+rtm,+hle \
+ -m 1024 \
+ -smp 1,sockets=1,cores=1,threads=1 \
+ -uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \
+diff --git a/tests/qemuxml2argvdata/q35-acpi-uefi.args b/tests/qemuxml2argvdata/q35-acpi-uefi.args
+index a3293aeb9d..8e3368b9e9 100644
+--- a/tests/qemuxml2argvdata/q35-acpi-uefi.args
++++ b/tests/qemuxml2argvdata/q35-acpi-uefi.args
+@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \
+ -name guest \
+ -S \
+ -machine q35,accel=tcg,usb=off,dump-guest-core=off \
+--cpu Haswell \
++-cpu Haswell,+rtm,+hle \
+ -drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,\
+ readonly=on \
+ -drive file=/var/lib/libvirt/qemu/nvram/guest_VARS.fd,if=pflash,format=raw,\
+diff --git a/tests/qemuxml2argvdata/q35-noacpi-nouefi.args b/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
+index fab2a6fcb0..0dd61840ef 100644
+--- a/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
++++ b/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
+@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \
+ -name guest \
+ -S \
+ -machine q35,accel=tcg,usb=off,dump-guest-core=off \
+--cpu Haswell \
++-cpu Haswell,+rtm,+hle \
+ -m 1024 \
+ -smp 1,sockets=1,cores=1,threads=1 \
+ -uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-RHEL-network-regain-guest-network-connectivity-after-firewalld-switch-to-nftables.patch b/SOURCES/libvirt-RHEL-network-regain-guest-network-connectivity-after-firewalld-switch-to-nftables.patch
new file mode 100644
index 0000000..081d0e9
--- /dev/null
+++ b/SOURCES/libvirt-RHEL-network-regain-guest-network-connectivity-after-firewalld-switch-to-nftables.patch
@@ -0,0 +1,146 @@
+From 54e270d7fb68b41002654374d395e4f260a24add Mon Sep 17 00:00:00 2001
+Message-Id: <54e270d7fb68b41002654374d395e4f260a24add@dist-git>
+From: Laine Stump <laine@redhat.com>
+Date: Mon, 15 Oct 2018 20:31:02 -0400
+Subject: [PATCH] RHEL: network: regain guest network connectivity after
+ firewalld switch to nftables
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This is a DOWNSTREAM ONLY patch to temporarily get back guest network
+connectivity while still allowing the firewalld backend to use
+nftables (which is the default with RHEL8).
+
+The circumstances that cause the problem:
+
+In the past (when both libvirt and firewalld used iptables), if either
+libvirt's rules *OR* firewalld's rules accepted a packet, it would be
+accepted.
+
+But now firewalld uses nftables for its backend, while libvirt's
+firewall rules are still using iptables; iptables rules are still
+processed, but at a different time during packet processing than the
+firewalld nftables hooks. The result is that a packet must be accepted
+by *BOTH* the libvirt iptables rules *AND* the firewalld nftable rules
+in order to be accepted.
+
+This causes pain for two types of traffic:
+
+1) libvirt always adds rules to permit DNS and DHCP (and sometimes
+TFTP) from guests to the host. But libvirt's bridges are in
+firewalld's "default" zone (which is usually the zone called
+"public"). The public zone allows ssh, but doesn't allow DNS, DHCP, or
+TFTP. So guests connected to libvirt's bridges can't acquire an IP
+address from DHCP, nor can they make DNS queries to the DNS server
+libvirt has setup on the host.
+
+2) firewalld's higher level "rich rules" don't yet have the ability to
+configure the acceptance of forwarded traffic (traffic that is going
+somewhere beyond the host), so any traffic that needs to be forwarded
+is rejected.
+
+libvirt can't send "direct" nftables rules (firewalld only supports
+that for iptables), so we can't solve this problem by just sending
+direct nftables rules instead of iptables rules.
+
+However, we can take advantage of a quirk in firewalld zones that have
+a default policy of accept (meaning any packet that doesn't match a
+specific rule in the zone will be accepted) - this default accept will
+also accept forwarded traffic (not just traffic destined for the host).
+
+So, as a temporary solution to get all network traffic flowing, this
+patch creates a new firewalld zone called "libvirt" which is setup to
+include interfaces named virbr0-virbr9, and has a default policy of
+accept. With this zone installed, libvirt networks that use the names
+virbr0-virbr9 will have *all* their traffic accepted, both to the host
+and to/from the rest of the network.
+
+firewalld zones can't normally be added to the runtime config of
+firewalld, so we have to reload all of the permanent config for it to
+be recognized. This is done with a call to "firewall-cmd --reload"
+during postinstall and postuninstall. In the case that firewalld is
+inactive, firewall-cmd exits without doing anything (i.e. it doesn't
+start up firewalld.service if it's not already started).
+
+This obviously can't be a permanent solution, since it allows guests
+to have access to *all* services on the host. However, it doesn't
+allow QE and beta testers to test firewalld with an nftables backend
+(which is important for firewalld and nftables devs) without breaking
+network connectivity for libvirt managed virtual machines (so testing
+of those can also take place.
+
+Resolves: https://bugzilla.redhat.com/1638864
+
+This problem is discussed in more detail in this message thread:
+
+https://post-office.corp.redhat.com/mailman/private/virt-devel/2018-September/msg00145.html
+https://post-office.corp.redhat.com/mailman/private/virt-devel/2018-October/msg00042.html
+
+and in the BZ assigned to firewalld: https://bugzilla.redhat.com/1623841
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Acked-by: Daniel P. Berrangé <berrange@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ libvirt.spec.in             | 14 ++++++++++++++
+ src/network/Makefile.inc.am | 10 +++++++++-
+ src/network/libvirt.zone    | 15 +++++++++++++++
+ 3 files changed, 38 insertions(+), 1 deletion(-)
+ create mode 100644 src/network/libvirt.zone
+
+diff --git a/src/network/Makefile.inc.am b/src/network/Makefile.inc.am
+index 508c8c0422..20d899e699 100644
+--- a/src/network/Makefile.inc.am
++++ b/src/network/Makefile.inc.am
+@@ -87,6 +87,11 @@ install-data-network:
+ 	( cd $(DESTDIR)$(confdir)/qemu/networks/autostart && \
+ 	  rm -f default.xml && \
+ 	  $(LN_S) ../default.xml default.xml )
++if HAVE_FIREWALLD
++	$(MKDIR_P) "$(DESTDIR)$(prefix)/lib/firewalld/zones"
++	$(INSTALL_DATA) $(srcdir)/network/libvirt.zone \
++	  $(DESTDIR)$(prefix)/lib/firewalld/zones/libvirt.xml
++endif HAVE_FIREWALLD
+ 
+ uninstall-data-network:
+ 	rm -f $(DESTDIR)$(confdir)/qemu/networks/autostart/default.xml
+@@ -95,10 +100,13 @@ uninstall-data-network:
+ 	rmdir "$(DESTDIR)$(confdir)/qemu/networks" || :
+ 	rmdir "$(DESTDIR)$(localstatedir)/lib/libvirt/network" ||:
+ 	rmdir "$(DESTDIR)$(localstatedir)/run/libvirt/network" ||:
++if HAVE_FIREWALLD
++	rm -f  $(DESTDIR)$(prefix)/lib/firewalld/zones/libvirt.xml
++endif HAVE_FIREWALLD
+ 
+ endif WITH_NETWORK
+ 
+-EXTRA_DIST += network/default.xml
++EXTRA_DIST += network/default.xml network/libvirt.zone
+ 
+ .PHONY: \
+ 	install-data-network \
+diff --git a/src/network/libvirt.zone b/src/network/libvirt.zone
+new file mode 100644
+index 0000000000..355a70b4da
+--- /dev/null
++++ b/src/network/libvirt.zone
+@@ -0,0 +1,15 @@
++<?xml version="1.0" encoding="utf-8"?>
++<zone target="ACCEPT">
++  <short>libvirt</short>
++  <description>All network connections are accepted. This also permits packets to/from interfaces in the zone to be forwarded. This zone is intended to be used only by libvirt virtual networks.</description>
++  <interface name="virbr0"/>
++  <interface name="virbr1"/>
++  <interface name="virbr2"/>
++  <interface name="virbr3"/>
++  <interface name="virbr4"/>
++  <interface name="virbr5"/>
++  <interface name="virbr6"/>
++  <interface name="virbr7"/>
++  <interface name="virbr8"/>
++  <interface name="virbr9"/>
++</zone>
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch b/SOURCES/libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch
new file mode 100644
index 0000000..537e868
--- /dev/null
+++ b/SOURCES/libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch
@@ -0,0 +1,77 @@
+From 2d4b19613c462e876ee1327d600f5cbbb998c540 Mon Sep 17 00:00:00 2001
+Message-Id: <2d4b19613c462e876ee1327d600f5cbbb998c540@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Mon, 17 Dec 2018 20:42:30 -0500
+Subject: [PATCH] RHEL: qemu: Add ability to set sgio values for hostdev
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1582424
+
+RHEL-only
+
+Add necessary checks in order to allow setting sgio values for a scsi
+host device
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit f2cf0ae7bc371c75f6c0e79192711f2b1d201b10)
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_conf.c | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
+index a4f545ef92..3ea9784854 100644
+--- a/src/qemu/qemu_conf.c
++++ b/src/qemu/qemu_conf.c
+@@ -1633,6 +1633,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+     virDomainDiskDefPtr disk = NULL;
+     virDomainHostdevDefPtr hostdev = NULL;
+     char *sysfs_path = NULL;
++    char *hostdev_path = NULL;
+     const char *path = NULL;
+     int val = -1;
+     int ret = -1;
+@@ -1654,14 +1655,10 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+         if (!qemuIsSharedHostdev(hostdev))
+             return 0;
+ 
+-        if (hostdev->source.subsys.u.scsi.sgio) {
+-            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+-                           _("'sgio' is not supported for SCSI "
+-                             "generic device yet "));
++        if (!(hostdev_path = qemuGetHostdevPath(hostdev)))
+             goto cleanup;
+-        }
+ 
+-        return 0;
++        path = hostdev_path;
+     } else {
+         return 0;
+     }
+@@ -1670,7 +1667,11 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+         goto cleanup;
+ 
+     /* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0.  */
+-    val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
++    if (dev->type == VIR_DOMAIN_DEVICE_DISK)
++        val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
++    else
++        val = (hostdev->source.subsys.u.scsi.sgio ==
++               VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
+ 
+     /* Do not do anything if unpriv_sgio is not supported by the kernel and the
+      * whitelist is enabled.  But if requesting unfiltered access, always call
+@@ -1683,6 +1684,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+     ret = 0;
+ 
+  cleanup:
++    VIR_FREE(hostdev_path);
+     VIR_FREE(sysfs_path);
+     return ret;
+ }
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch b/SOURCES/libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch
new file mode 100644
index 0000000..61a15f5
--- /dev/null
+++ b/SOURCES/libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch
@@ -0,0 +1,64 @@
+From c39257f41ccb22272c6161777bf71390676bf7f0 Mon Sep 17 00:00:00 2001
+Message-Id: <c39257f41ccb22272c6161777bf71390676bf7f0@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Mon, 17 Dec 2018 20:42:31 -0500
+Subject: [PATCH] RHEL: qemu: Add check for unpriv sgio for SCSI generic host
+ device
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1582424
+
+RHEL-only
+
+Check if the hostdev has set the sgio filtered/unfiltered and handle
+appropriately.
+
+This restores functionality removed by upstream commit id 'ce346623'
+to remove sgio support for the SCSI generic host device.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 712005bcf26190dc6fd1fe56283377987909cc4b)
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_conf.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
+index 3ea9784854..7d15af9c0b 100644
+--- a/src/qemu/qemu_conf.c
++++ b/src/qemu/qemu_conf.c
+@@ -1473,6 +1473,8 @@ qemuAddSharedHostdev(virQEMUDriverPtr driver,
+ {
+     char *dev_path = NULL;
+     char *key = NULL;
++    virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
++    virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
+     int ret = -1;
+ 
+     if (!qemuIsSharedHostdev(hostdev))
+@@ -1481,6 +1483,19 @@ qemuAddSharedHostdev(virQEMUDriverPtr driver,
+     if (!(dev_path = qemuGetHostdevPath(hostdev)))
+         goto cleanup;
+ 
++    if ((ret = qemuCheckUnprivSGIO(driver->sharedDevices, dev_path,
++                                   scsisrc->sgio)) < 0) {
++        if (ret == -2) {
++            virReportError(VIR_ERR_OPERATION_INVALID,
++                           _("sgio of shared scsi host device '%s-%u-%u-%llu' "
++                             "conflicts with other active domains"),
++                           scsihostsrc->adapter, scsihostsrc->bus,
++                           scsihostsrc->target, scsihostsrc->unit);
++            ret = -1;
++        }
++        goto cleanup;
++    }
++
+     if (!(key = qemuGetSharedDeviceKey(dev_path)))
+         goto cleanup;
+ 
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-RHEL-qemu-Fix-crash-trying-to-use-iSCSI-hostdev.patch b/SOURCES/libvirt-RHEL-qemu-Fix-crash-trying-to-use-iSCSI-hostdev.patch
new file mode 100644
index 0000000..c86c563
--- /dev/null
+++ b/SOURCES/libvirt-RHEL-qemu-Fix-crash-trying-to-use-iSCSI-hostdev.patch
@@ -0,0 +1,45 @@
+From 11bfd4f26c090b95a100aaf056ecfa799dfce979 Mon Sep 17 00:00:00 2001
+Message-Id: <11bfd4f26c090b95a100aaf056ecfa799dfce979@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Fri, 25 Jan 2019 12:19:12 -0500
+Subject: [PATCH] RHEL: qemu: Fix crash trying to use iSCSI hostdev
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1669424
+https://bugzilla.redhat.com/show_bug.cgi?id=1669966
+
+RHEL-only
+
+Commit 861a1a4d2 moved the qemuIsSharedHostdev filter in the
+HOSTDEV half of the logic to allow calling qemuGetHostdevPath;
+however, that neglected to check whether the SCSI hostdev was
+using the iSCSI protocol which has a different overlayed struct
+format (u.iscsi vs. u.host) resulting in attempted access of
+u.host when calling virSCSIDeviceGetDevName.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_conf.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
+index 768e9d8308..a81298326f 100644
+--- a/src/qemu/qemu_conf.c
++++ b/src/qemu/qemu_conf.c
+@@ -1667,6 +1667,10 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+     } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
+         hostdev = dev->data.hostdev;
+ 
++        if (hostdev->source.subsys.u.scsi.protocol ==
++            VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
++            return 0;
++
+         if (!(hostdev_path = qemuGetHostdevPath(hostdev)))
+             goto cleanup;
+ 
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-Revert-RHEL-network-regain-guest-network-connectivity-after-firewalld-switch-to-nftables.patch b/SOURCES/libvirt-Revert-RHEL-network-regain-guest-network-connectivity-after-firewalld-switch-to-nftables.patch
new file mode 100644
index 0000000..600d63a
--- /dev/null
+++ b/SOURCES/libvirt-Revert-RHEL-network-regain-guest-network-connectivity-after-firewalld-switch-to-nftables.patch
@@ -0,0 +1,84 @@
+From 195908ad66fc52643d94eca0f45e5740f25e3e78 Mon Sep 17 00:00:00 2001
+Message-Id: <195908ad66fc52643d94eca0f45e5740f25e3e78@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Fri, 1 Feb 2019 20:29:26 -0500
+Subject: [PATCH] Revert "RHEL: network: regain guest network connectivity
+ after firewalld switch to nftables"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 54e270d7fb68b41002654374d395e4f260a24add.
+
+This patch appeared in libvirt-4.5.0-11.el8 (RHEL git commit id
+2fb53957). It was a downstream-only temporary fix to the networking
+issues resulting from firewalld's switch to using nftables. Now that
+there is a permanent fix upstream we can revert this patch and use the
+upstream patches instead.
+
+https://bugzilla.redhat.com/1650320
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ libvirt.spec.in             | 14 --------------
+ src/network/Makefile.inc.am | 10 +---------
+ src/network/libvirt.zone    | 15 ---------------
+ 3 files changed, 1 insertion(+), 38 deletions(-)
+ delete mode 100644 src/network/libvirt.zone
+
+diff --git a/src/network/Makefile.inc.am b/src/network/Makefile.inc.am
+index 20d899e699..508c8c0422 100644
+--- a/src/network/Makefile.inc.am
++++ b/src/network/Makefile.inc.am
+@@ -87,11 +87,6 @@ install-data-network:
+ 	( cd $(DESTDIR)$(confdir)/qemu/networks/autostart && \
+ 	  rm -f default.xml && \
+ 	  $(LN_S) ../default.xml default.xml )
+-if HAVE_FIREWALLD
+-	$(MKDIR_P) "$(DESTDIR)$(prefix)/lib/firewalld/zones"
+-	$(INSTALL_DATA) $(srcdir)/network/libvirt.zone \
+-	  $(DESTDIR)$(prefix)/lib/firewalld/zones/libvirt.xml
+-endif HAVE_FIREWALLD
+ 
+ uninstall-data-network:
+ 	rm -f $(DESTDIR)$(confdir)/qemu/networks/autostart/default.xml
+@@ -100,13 +95,10 @@ uninstall-data-network:
+ 	rmdir "$(DESTDIR)$(confdir)/qemu/networks" || :
+ 	rmdir "$(DESTDIR)$(localstatedir)/lib/libvirt/network" ||:
+ 	rmdir "$(DESTDIR)$(localstatedir)/run/libvirt/network" ||:
+-if HAVE_FIREWALLD
+-	rm -f  $(DESTDIR)$(prefix)/lib/firewalld/zones/libvirt.xml
+-endif HAVE_FIREWALLD
+ 
+ endif WITH_NETWORK
+ 
+-EXTRA_DIST += network/default.xml network/libvirt.zone
++EXTRA_DIST += network/default.xml
+ 
+ .PHONY: \
+ 	install-data-network \
+diff --git a/src/network/libvirt.zone b/src/network/libvirt.zone
+deleted file mode 100644
+index 355a70b4da..0000000000
+--- a/src/network/libvirt.zone
++++ /dev/null
+@@ -1,15 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<zone target="ACCEPT">
+-  <short>libvirt</short>
+-  <description>All network connections are accepted. This also permits packets to/from interfaces in the zone to be forwarded. This zone is intended to be used only by libvirt virtual networks.</description>
+-  <interface name="virbr0"/>
+-  <interface name="virbr1"/>
+-  <interface name="virbr2"/>
+-  <interface name="virbr3"/>
+-  <interface name="virbr4"/>
+-  <interface name="virbr5"/>
+-  <interface name="virbr6"/>
+-  <interface name="virbr7"/>
+-  <interface name="virbr8"/>
+-  <interface name="virbr9"/>
+-</zone>
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-Revert-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName.patch b/SOURCES/libvirt-Revert-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName.patch
new file mode 100644
index 0000000..546facb
--- /dev/null
+++ b/SOURCES/libvirt-Revert-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName.patch
@@ -0,0 +1,163 @@
+From 6af885a53e425b88c7d9c123f64bbc4f8517b8a8 Mon Sep 17 00:00:00 2001
+Message-Id: <6af885a53e425b88c7d9c123f64bbc4f8517b8a8@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Thu, 15 Nov 2018 06:43:58 -0500
+Subject: [PATCH] Revert "access: Modify the VIR_ERR_ACCESS_DENIED to include
+ driverName"
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1631608 (RHEL8)
+https://bugzilla.redhat.com/show_bug.cgi?id=1631606 (RHEL7)
+
+This reverts commit ccc72d5cbdd85f66cb737134b3be40aac1df03ef.
+
+Based on upstream comment to a follow-up patch, this didn't take the
+right approach and the right thing to do is revert and rework.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit b08396a5feab02fb3bb595603c888ee733aa178e)
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/access/viraccessmanager.c | 25 ++++++++++++-------------
+ src/rpc/gendispatch.pl        |  2 +-
+ src/util/virerror.c           |  4 ++--
+ 3 files changed, 15 insertions(+), 16 deletions(-)
+
+diff --git a/src/access/viraccessmanager.c b/src/access/viraccessmanager.c
+index 1dfff32b9d..e7b5bf38da 100644
+--- a/src/access/viraccessmanager.c
++++ b/src/access/viraccessmanager.c
+@@ -196,12 +196,11 @@ static void virAccessManagerDispose(void *object)
+  * should the admin need to debug things
+  */
+ static int
+-virAccessManagerSanitizeError(int ret,
+-                              const char *driverName)
++virAccessManagerSanitizeError(int ret)
+ {
+     if (ret < 0) {
+         virResetLastError();
+-        virAccessError(VIR_ERR_ACCESS_DENIED, driverName, NULL);
++        virAccessError(VIR_ERR_ACCESS_DENIED, NULL);
+     }
+ 
+     return ret;
+@@ -218,7 +217,7 @@ int virAccessManagerCheckConnect(virAccessManagerPtr manager,
+     if (manager->drv->checkConnect)
+         ret = manager->drv->checkConnect(manager, driverName, perm);
+ 
+-    return virAccessManagerSanitizeError(ret, driverName);
++    return virAccessManagerSanitizeError(ret);
+ }
+ 
+ 
+@@ -234,7 +233,7 @@ int virAccessManagerCheckDomain(virAccessManagerPtr manager,
+     if (manager->drv->checkDomain)
+         ret = manager->drv->checkDomain(manager, driverName, domain, perm);
+ 
+-    return virAccessManagerSanitizeError(ret, driverName);
++    return virAccessManagerSanitizeError(ret);
+ }
+ 
+ int virAccessManagerCheckInterface(virAccessManagerPtr manager,
+@@ -249,7 +248,7 @@ int virAccessManagerCheckInterface(virAccessManagerPtr manager,
+     if (manager->drv->checkInterface)
+         ret = manager->drv->checkInterface(manager, driverName, iface, perm);
+ 
+-    return virAccessManagerSanitizeError(ret, driverName);
++    return virAccessManagerSanitizeError(ret);
+ }
+ 
+ int virAccessManagerCheckNetwork(virAccessManagerPtr manager,
+@@ -264,7 +263,7 @@ int virAccessManagerCheckNetwork(virAccessManagerPtr manager,
+     if (manager->drv->checkNetwork)
+         ret = manager->drv->checkNetwork(manager, driverName, network, perm);
+ 
+-    return virAccessManagerSanitizeError(ret, driverName);
++    return virAccessManagerSanitizeError(ret);
+ }
+ 
+ int virAccessManagerCheckNodeDevice(virAccessManagerPtr manager,
+@@ -279,7 +278,7 @@ int virAccessManagerCheckNodeDevice(virAccessManagerPtr manager,
+     if (manager->drv->checkNodeDevice)
+         ret = manager->drv->checkNodeDevice(manager, driverName, nodedev, perm);
+ 
+-    return virAccessManagerSanitizeError(ret, driverName);
++    return virAccessManagerSanitizeError(ret);
+ }
+ 
+ int virAccessManagerCheckNWFilter(virAccessManagerPtr manager,
+@@ -294,7 +293,7 @@ int virAccessManagerCheckNWFilter(virAccessManagerPtr manager,
+     if (manager->drv->checkNWFilter)
+         ret = manager->drv->checkNWFilter(manager, driverName, nwfilter, perm);
+ 
+-    return virAccessManagerSanitizeError(ret, driverName);
++    return virAccessManagerSanitizeError(ret);
+ }
+ 
+ int virAccessManagerCheckNWFilterBinding(virAccessManagerPtr manager,
+@@ -309,7 +308,7 @@ int virAccessManagerCheckNWFilterBinding(virAccessManagerPtr manager,
+     if (manager->drv->checkNWFilterBinding)
+         ret = manager->drv->checkNWFilterBinding(manager, driverName, binding, perm);
+ 
+-    return virAccessManagerSanitizeError(ret, driverName);
++    return virAccessManagerSanitizeError(ret);
+ }
+ 
+ int virAccessManagerCheckSecret(virAccessManagerPtr manager,
+@@ -324,7 +323,7 @@ int virAccessManagerCheckSecret(virAccessManagerPtr manager,
+     if (manager->drv->checkSecret)
+         ret = manager->drv->checkSecret(manager, driverName, secret, perm);
+ 
+-    return virAccessManagerSanitizeError(ret, driverName);
++    return virAccessManagerSanitizeError(ret);
+ }
+ 
+ int virAccessManagerCheckStoragePool(virAccessManagerPtr manager,
+@@ -339,7 +338,7 @@ int virAccessManagerCheckStoragePool(virAccessManagerPtr manager,
+     if (manager->drv->checkStoragePool)
+         ret = manager->drv->checkStoragePool(manager, driverName, pool, perm);
+ 
+-    return virAccessManagerSanitizeError(ret, driverName);
++    return virAccessManagerSanitizeError(ret);
+ }
+ 
+ int virAccessManagerCheckStorageVol(virAccessManagerPtr manager,
+@@ -355,5 +354,5 @@ int virAccessManagerCheckStorageVol(virAccessManagerPtr manager,
+     if (manager->drv->checkStorageVol)
+         ret = manager->drv->checkStorageVol(manager, driverName, pool, vol, perm);
+ 
+-    return virAccessManagerSanitizeError(ret, driverName);
++    return virAccessManagerSanitizeError(ret);
+ }
+diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
+index f599002056..0c4648c0fb 100755
+--- a/src/rpc/gendispatch.pl
++++ b/src/rpc/gendispatch.pl
+@@ -2199,7 +2199,7 @@ elsif ($mode eq "client") {
+                     print "        virObjectUnref(mgr);\n";
+                     if ($action eq "Ensure") {
+                         print "        if (rv == 0)\n";
+-                        print "            virReportError(VIR_ERR_ACCESS_DENIED, conn->driver->name, NULL);\n";
++                        print "            virReportError(VIR_ERR_ACCESS_DENIED, NULL);\n";
+                         print "        return $fail;\n";
+                     } else {
+                         print "        virResetLastError();\n";
+diff --git a/src/util/virerror.c b/src/util/virerror.c
+index 5f50fa0349..f198f27957 100644
+--- a/src/util/virerror.c
++++ b/src/util/virerror.c
+@@ -1439,9 +1439,9 @@ virErrorMsg(virErrorNumber error, const char *info)
+             break;
+         case VIR_ERR_ACCESS_DENIED:
+             if (info == NULL)
+-                errmsg = _("access denied from '%s'");
++                errmsg = _("access denied");
+             else
+-                errmsg = _("access denied from '%s': %s");
++                errmsg = _("access denied: %s");
+             break;
+         case VIR_ERR_DBUS_SERVICE:
+             if (info == NULL)
+-- 
+2.19.2
+
diff --git a/SOURCES/libvirt-access-Fix-nwfilter-binding-ACL-access-API-name-generation.patch b/SOURCES/libvirt-access-Fix-nwfilter-binding-ACL-access-API-name-generation.patch
new file mode 100644
index 0000000..4b53a50
--- /dev/null
+++ b/SOURCES/libvirt-access-Fix-nwfilter-binding-ACL-access-API-name-generation.patch
@@ -0,0 +1,60 @@
+From 254da75ea1a9c2cade909534153f444bb8981c2a Mon Sep 17 00:00:00 2001
+Message-Id: <254da75ea1a9c2cade909534153f444bb8981c2a@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Mon, 27 Aug 2018 08:27:47 -0400
+Subject: [PATCH] access: Fix nwfilter-binding ACL access API name generation
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1611320
+
+Generation of the ACL API policy is a "automated process"
+based on this perl script which "worked" with the changes to
+add nwfilter binding API's because they had the "nwfilter"
+prefix; however, the generated output name was incorrect
+based on the remote protocol algorithm which expected to
+generate names such as 'nwfilter-binding.action' instead
+of 'nwfilter.binding-action'.
+
+This effectively changes src/access/org.libvirt.api.policy entries:
+
+  org.libvirt.api.nwfilter.binding-create ==>
+      org.libvirt.api.nwfilter-binding.create
+
+  org.libvirt.api.nwfilter.binding-delete ==>
+      org.libvirt.api.nwfilter-binding.delete
+
+  org.libvirt.api.nwfilter.binding-getattr ==>
+      org.libvirt.api.nwfilter-binding.getattr
+
+  org.libvirt.api.nwfilter.binding-read ==>
+      org.libvirt.api.nwfilter-binding.read
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 6ef65e3c96d5d1f16a16daca83b81b818d461e64)
+https: //bugzilla.redhat.com/show_bug.cgi?id=1622540
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/access/genpolkit.pl | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/access/genpolkit.pl b/src/access/genpolkit.pl
+index 968cb8c55c..e074c90eb6 100755
+--- a/src/access/genpolkit.pl
++++ b/src/access/genpolkit.pl
+@@ -22,8 +22,8 @@ use warnings;
+ 
+ my @objects = (
+     "CONNECT", "DOMAIN", "INTERFACE",
+-    "NETWORK","NODE_DEVICE", "NWFILTER",
+-     "SECRET", "STORAGE_POOL", "STORAGE_VOL",
++    "NETWORK","NODE_DEVICE", "NWFILTER_BINDING", "NWFILTER",
++    "SECRET", "STORAGE_POOL", "STORAGE_VOL",
+     );
+ 
+ my $objects = join ("|", @objects);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName.patch b/SOURCES/libvirt-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName.patch
new file mode 100644
index 0000000..a47583c
--- /dev/null
+++ b/SOURCES/libvirt-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName.patch
@@ -0,0 +1,173 @@
+From 85750b0466aa3719d3d2447abaab2e87db92f552 Mon Sep 17 00:00:00 2001
+Message-Id: <85750b0466aa3719d3d2447abaab2e87db92f552@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Mon, 5 Nov 2018 07:48:37 -0500
+Subject: [PATCH] access: Modify the VIR_ERR_ACCESS_DENIED to include
+ driverName
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1631608 (RHEL 8.0)
+https://bugzilla.redhat.com/show_bug.cgi?id=1631606 (RHEL 7.7)
+
+Changes made to manage and utilize a secondary connection
+driver to APIs outside the scope of the primary connection
+driver have resulted in some confusion processing polkit rules
+since the simple "access denied" error message doesn't provide
+enough of a clue when combined with the "authentication failed:
+access denied by policy" as to which connection driver refused
+or failed the ACL check.
+
+In order to provide some context, let's modify the existing
+"access denied" error returne from the various vir*EnsureACL
+API's to provide the connection driver name that is causing
+the failure. This should provide the context for writing the
+polkit rules that would allow access via the driver.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+ACKed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit ccc72d5cbdd85f66cb737134b3be40aac1df03ef)
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/access/viraccessmanager.c | 25 +++++++++++++------------
+ src/rpc/gendispatch.pl        |  2 +-
+ src/util/virerror.c           |  4 ++--
+ 3 files changed, 16 insertions(+), 15 deletions(-)
+
+diff --git a/src/access/viraccessmanager.c b/src/access/viraccessmanager.c
+index e7b5bf38da..1dfff32b9d 100644
+--- a/src/access/viraccessmanager.c
++++ b/src/access/viraccessmanager.c
+@@ -196,11 +196,12 @@ static void virAccessManagerDispose(void *object)
+  * should the admin need to debug things
+  */
+ static int
+-virAccessManagerSanitizeError(int ret)
++virAccessManagerSanitizeError(int ret,
++                              const char *driverName)
+ {
+     if (ret < 0) {
+         virResetLastError();
+-        virAccessError(VIR_ERR_ACCESS_DENIED, NULL);
++        virAccessError(VIR_ERR_ACCESS_DENIED, driverName, NULL);
+     }
+ 
+     return ret;
+@@ -217,7 +218,7 @@ int virAccessManagerCheckConnect(virAccessManagerPtr manager,
+     if (manager->drv->checkConnect)
+         ret = manager->drv->checkConnect(manager, driverName, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ 
+@@ -233,7 +234,7 @@ int virAccessManagerCheckDomain(virAccessManagerPtr manager,
+     if (manager->drv->checkDomain)
+         ret = manager->drv->checkDomain(manager, driverName, domain, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckInterface(virAccessManagerPtr manager,
+@@ -248,7 +249,7 @@ int virAccessManagerCheckInterface(virAccessManagerPtr manager,
+     if (manager->drv->checkInterface)
+         ret = manager->drv->checkInterface(manager, driverName, iface, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckNetwork(virAccessManagerPtr manager,
+@@ -263,7 +264,7 @@ int virAccessManagerCheckNetwork(virAccessManagerPtr manager,
+     if (manager->drv->checkNetwork)
+         ret = manager->drv->checkNetwork(manager, driverName, network, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckNodeDevice(virAccessManagerPtr manager,
+@@ -278,7 +279,7 @@ int virAccessManagerCheckNodeDevice(virAccessManagerPtr manager,
+     if (manager->drv->checkNodeDevice)
+         ret = manager->drv->checkNodeDevice(manager, driverName, nodedev, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckNWFilter(virAccessManagerPtr manager,
+@@ -293,7 +294,7 @@ int virAccessManagerCheckNWFilter(virAccessManagerPtr manager,
+     if (manager->drv->checkNWFilter)
+         ret = manager->drv->checkNWFilter(manager, driverName, nwfilter, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckNWFilterBinding(virAccessManagerPtr manager,
+@@ -308,7 +309,7 @@ int virAccessManagerCheckNWFilterBinding(virAccessManagerPtr manager,
+     if (manager->drv->checkNWFilterBinding)
+         ret = manager->drv->checkNWFilterBinding(manager, driverName, binding, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckSecret(virAccessManagerPtr manager,
+@@ -323,7 +324,7 @@ int virAccessManagerCheckSecret(virAccessManagerPtr manager,
+     if (manager->drv->checkSecret)
+         ret = manager->drv->checkSecret(manager, driverName, secret, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckStoragePool(virAccessManagerPtr manager,
+@@ -338,7 +339,7 @@ int virAccessManagerCheckStoragePool(virAccessManagerPtr manager,
+     if (manager->drv->checkStoragePool)
+         ret = manager->drv->checkStoragePool(manager, driverName, pool, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckStorageVol(virAccessManagerPtr manager,
+@@ -354,5 +355,5 @@ int virAccessManagerCheckStorageVol(virAccessManagerPtr manager,
+     if (manager->drv->checkStorageVol)
+         ret = manager->drv->checkStorageVol(manager, driverName, pool, vol, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
+index 0c4648c0fb..f599002056 100755
+--- a/src/rpc/gendispatch.pl
++++ b/src/rpc/gendispatch.pl
+@@ -2199,7 +2199,7 @@ elsif ($mode eq "client") {
+                     print "        virObjectUnref(mgr);\n";
+                     if ($action eq "Ensure") {
+                         print "        if (rv == 0)\n";
+-                        print "            virReportError(VIR_ERR_ACCESS_DENIED, NULL);\n";
++                        print "            virReportError(VIR_ERR_ACCESS_DENIED, conn->driver->name, NULL);\n";
+                         print "        return $fail;\n";
+                     } else {
+                         print "        virResetLastError();\n";
+diff --git a/src/util/virerror.c b/src/util/virerror.c
+index f198f27957..5f50fa0349 100644
+--- a/src/util/virerror.c
++++ b/src/util/virerror.c
+@@ -1439,9 +1439,9 @@ virErrorMsg(virErrorNumber error, const char *info)
+             break;
+         case VIR_ERR_ACCESS_DENIED:
+             if (info == NULL)
+-                errmsg = _("access denied");
++                errmsg = _("access denied from '%s'");
+             else
+-                errmsg = _("access denied: %s");
++                errmsg = _("access denied from '%s': %s");
+             break;
+         case VIR_ERR_DBUS_SERVICE:
+             if (info == NULL)
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName_1.patch b/SOURCES/libvirt-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName_1.patch
new file mode 100644
index 0000000..dc0cb0a
--- /dev/null
+++ b/SOURCES/libvirt-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName_1.patch
@@ -0,0 +1,159 @@
+From 541a154e0f98604f63cb22356287dfa3858748c9 Mon Sep 17 00:00:00 2001
+Message-Id: <541a154e0f98604f63cb22356287dfa3858748c9@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Thu, 15 Nov 2018 06:43:59 -0500
+Subject: [PATCH] access: Modify the VIR_ERR_ACCESS_DENIED to include
+ driverName
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1631608 (RHEL8)
+https://bugzilla.redhat.com/show_bug.cgi?id=1631606 (RHEL7)
+
+Changes made to manage and utilize a secondary connection
+driver to APIs outside the scope of the primary connection
+driver have resulted in some confusion processing polkit rules
+since the simple "access denied" error message doesn't provide
+enough of a clue when combined with the "authentication failed:
+access denied by policy" as to which connection driver refused
+or failed the ACL check.
+
+In order to provide some context, let's modify the existing
+"access denied" error returned from the various vir*EnsureACL
+API's to provide the connection driver name that is causing
+the failure. This should provide the context for writing the
+polkit rules that would allow access via the driver, but yet
+still adhere to the virAccessManagerSanitizeError commentary
+regarding not telling the user why access was denied.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 605496be609e153526fcdd3e98df8cf5244bc8fa)
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/access/viraccessmanager.c | 26 ++++++++++++++------------
+ src/rpc/gendispatch.pl        |  3 ++-
+ 2 files changed, 16 insertions(+), 13 deletions(-)
+
+diff --git a/src/access/viraccessmanager.c b/src/access/viraccessmanager.c
+index e7b5bf38da..f5d62604cf 100644
+--- a/src/access/viraccessmanager.c
++++ b/src/access/viraccessmanager.c
+@@ -196,11 +196,13 @@ static void virAccessManagerDispose(void *object)
+  * should the admin need to debug things
+  */
+ static int
+-virAccessManagerSanitizeError(int ret)
++virAccessManagerSanitizeError(int ret,
++                              const char *driverName)
+ {
+     if (ret < 0) {
+         virResetLastError();
+-        virAccessError(VIR_ERR_ACCESS_DENIED, NULL);
++        virAccessError(VIR_ERR_ACCESS_DENIED,
++                       _("'%s' denied access"), driverName);
+     }
+ 
+     return ret;
+@@ -217,7 +219,7 @@ int virAccessManagerCheckConnect(virAccessManagerPtr manager,
+     if (manager->drv->checkConnect)
+         ret = manager->drv->checkConnect(manager, driverName, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ 
+@@ -233,7 +235,7 @@ int virAccessManagerCheckDomain(virAccessManagerPtr manager,
+     if (manager->drv->checkDomain)
+         ret = manager->drv->checkDomain(manager, driverName, domain, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckInterface(virAccessManagerPtr manager,
+@@ -248,7 +250,7 @@ int virAccessManagerCheckInterface(virAccessManagerPtr manager,
+     if (manager->drv->checkInterface)
+         ret = manager->drv->checkInterface(manager, driverName, iface, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckNetwork(virAccessManagerPtr manager,
+@@ -263,7 +265,7 @@ int virAccessManagerCheckNetwork(virAccessManagerPtr manager,
+     if (manager->drv->checkNetwork)
+         ret = manager->drv->checkNetwork(manager, driverName, network, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckNodeDevice(virAccessManagerPtr manager,
+@@ -278,7 +280,7 @@ int virAccessManagerCheckNodeDevice(virAccessManagerPtr manager,
+     if (manager->drv->checkNodeDevice)
+         ret = manager->drv->checkNodeDevice(manager, driverName, nodedev, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckNWFilter(virAccessManagerPtr manager,
+@@ -293,7 +295,7 @@ int virAccessManagerCheckNWFilter(virAccessManagerPtr manager,
+     if (manager->drv->checkNWFilter)
+         ret = manager->drv->checkNWFilter(manager, driverName, nwfilter, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckNWFilterBinding(virAccessManagerPtr manager,
+@@ -308,7 +310,7 @@ int virAccessManagerCheckNWFilterBinding(virAccessManagerPtr manager,
+     if (manager->drv->checkNWFilterBinding)
+         ret = manager->drv->checkNWFilterBinding(manager, driverName, binding, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckSecret(virAccessManagerPtr manager,
+@@ -323,7 +325,7 @@ int virAccessManagerCheckSecret(virAccessManagerPtr manager,
+     if (manager->drv->checkSecret)
+         ret = manager->drv->checkSecret(manager, driverName, secret, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckStoragePool(virAccessManagerPtr manager,
+@@ -338,7 +340,7 @@ int virAccessManagerCheckStoragePool(virAccessManagerPtr manager,
+     if (manager->drv->checkStoragePool)
+         ret = manager->drv->checkStoragePool(manager, driverName, pool, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+ 
+ int virAccessManagerCheckStorageVol(virAccessManagerPtr manager,
+@@ -354,5 +356,5 @@ int virAccessManagerCheckStorageVol(virAccessManagerPtr manager,
+     if (manager->drv->checkStorageVol)
+         ret = manager->drv->checkStorageVol(manager, driverName, pool, vol, perm);
+ 
+-    return virAccessManagerSanitizeError(ret);
++    return virAccessManagerSanitizeError(ret, driverName);
+ }
+diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
+index 0c4648c0fb..a8b9f5aeca 100755
+--- a/src/rpc/gendispatch.pl
++++ b/src/rpc/gendispatch.pl
+@@ -2199,7 +2199,8 @@ elsif ($mode eq "client") {
+                     print "        virObjectUnref(mgr);\n";
+                     if ($action eq "Ensure") {
+                         print "        if (rv == 0)\n";
+-                        print "            virReportError(VIR_ERR_ACCESS_DENIED, NULL);\n";
++                        print "            virReportError(VIR_ERR_ACCESS_DENIED,\n";
++                        print"                            _(\"'%s' denied access\"), conn->driver->name);\n";
+                         print "        return $fail;\n";
+                     } else {
+                         print "        virResetLastError();\n";
+-- 
+2.19.2
+
diff --git a/SOURCES/libvirt-conf-Add-validation-of-input-devices.patch b/SOURCES/libvirt-conf-Add-validation-of-input-devices.patch
new file mode 100644
index 0000000..5f9dbbb
--- /dev/null
+++ b/SOURCES/libvirt-conf-Add-validation-of-input-devices.patch
@@ -0,0 +1,76 @@
+From c2afbedc310ac1a65a5ee96c8fa4103e926483c4 Mon Sep 17 00:00:00 2001
+Message-Id: <c2afbedc310ac1a65a5ee96c8fa4103e926483c4@dist-git>
+From: Han Han <hhan@redhat.com>
+Date: Tue, 28 Aug 2018 10:30:51 +0200
+Subject: [PATCH] conf: Add validation of input devices
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1591151
+
+Add function virDomainInputDefValidate to validate input devices.
+Make sure evdev attribute of source element is not used by mouse,
+keyboard, and tablet input device.
+
+Signed-off-by: Han Han <hhan@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit deb057fd364cb57614c6dea7b05c247231f9ae4f)
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1591240
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+---
+ src/conf/domain_conf.c | 27 ++++++++++++++++++++++++++-
+ 1 file changed, 26 insertions(+), 1 deletion(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 51a79ad8b1..16e52d149d 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -5760,6 +5760,29 @@ virDomainVsockDefValidate(const virDomainVsockDef *vsock)
+     return 0;
+ }
+ 
++static int
++virDomainInputDefValidate(const virDomainInputDef *input)
++{
++    switch ((virDomainInputType) input->type) {
++        case VIR_DOMAIN_INPUT_TYPE_MOUSE:
++        case VIR_DOMAIN_INPUT_TYPE_TABLET:
++        case VIR_DOMAIN_INPUT_TYPE_KBD:
++        case VIR_DOMAIN_INPUT_TYPE_LAST:
++            if (input->source.evdev) {
++                 virReportError(VIR_ERR_XML_ERROR, "%s",
++                                _("setting source evdev path only supported for "
++                                  "passthrough input devices"));
++                 return -1;
++            }
++            break;
++
++        case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH:
++            break;
++    }
++
++    return 0;
++}
++
+ 
+ static int
+ virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
+@@ -5799,9 +5822,11 @@ virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
+     case VIR_DOMAIN_DEVICE_VSOCK:
+         return virDomainVsockDefValidate(dev->data.vsock);
+ 
++    case VIR_DOMAIN_DEVICE_INPUT:
++        return virDomainInputDefValidate(dev->data.input);
++
+     case VIR_DOMAIN_DEVICE_LEASE:
+     case VIR_DOMAIN_DEVICE_FS:
+-    case VIR_DOMAIN_DEVICE_INPUT:
+     case VIR_DOMAIN_DEVICE_SOUND:
+     case VIR_DOMAIN_DEVICE_WATCHDOG:
+     case VIR_DOMAIN_DEVICE_GRAPHICS:
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Fix-a-error-msg-typo-in-virDomainVideoDefValidate.patch b/SOURCES/libvirt-conf-Fix-a-error-msg-typo-in-virDomainVideoDefValidate.patch
new file mode 100644
index 0000000..c848359
--- /dev/null
+++ b/SOURCES/libvirt-conf-Fix-a-error-msg-typo-in-virDomainVideoDefValidate.patch
@@ -0,0 +1,35 @@
+From b1c91c78451c59b0ebe3aafa17eef764e69be28c Mon Sep 17 00:00:00 2001
+Message-Id: <b1c91c78451c59b0ebe3aafa17eef764e69be28c@dist-git>
+From: Han Han <hhan@redhat.com>
+Date: Tue, 31 Jul 2018 10:42:27 +0200
+Subject: [PATCH] conf: Fix a error msg typo in virDomainVideoDefValidate
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1607825
+
+Introduced by commit d48813e8.
+
+Signed-off-by: Han Han <hhan@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit d1c4480390da7243e37daee37f8a40cb439a6a7c)
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/conf/domain_conf.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 23288aa01b..a05aad056d 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -5697,7 +5697,7 @@ virDomainVideoDefValidate(const virDomainVideoDef *video,
+         if (def->videos[i]->type == VIR_DOMAIN_VIDEO_TYPE_NONE &&
+             def->nvideos > 1) {
+             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+-                           _("a '%s' video type must be the only video device "
++                           _("a 'none' video type must be the only video device "
+                              "defined for the domain"));
+             return -1;
+         }
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Fix-check-for-chardev-source-path.patch b/SOURCES/libvirt-conf-Fix-check-for-chardev-source-path.patch
new file mode 100644
index 0000000..6aa4fef
--- /dev/null
+++ b/SOURCES/libvirt-conf-Fix-check-for-chardev-source-path.patch
@@ -0,0 +1,113 @@
+From 27213f01f9320cf0fec49980f78a100e64025ba4 Mon Sep 17 00:00:00 2001
+Message-Id: <27213f01f9320cf0fec49980f78a100e64025ba4@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Fri, 7 Sep 2018 17:53:32 +0200
+Subject: [PATCH] conf: Fix check for chardev source path
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Attempting to use a chardev definition like
+
+  <serial type='unix'>
+    <target type='isa-serial'/>
+  </serial>
+
+correctly results in an error being reported, since the source
+path - a required piece of information - is missing; however,
+the very similar
+
+  <serial type='unix'>
+    <target type='pci-serial'/>
+  </serial>
+
+was happily accepted by libvirt, only to result in libvirtd
+crashing as soon as the guest was started.
+
+The issue was caused by checking the chardev's targetType
+against whitelisted values from virDomainChrChannelTargetType
+without first checking the chardev's deviceType to make sure
+it is actually a channel, for which the check makes sense,
+rather than a different type of chardev.
+
+The only reason this wasn't spotted earlier is that the
+whitelisted values just so happen to correspond to USB and
+PCI serial devices and Xen and UML consoles respectively,
+all of which are fairly uncommon.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1609720
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 614193fac67445a7e92bf620ffef726ed1bd6f07)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1609723
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/conf/domain_conf.c                            | 11 +++++++----
+ .../serial-unix-missing-source.xml                | 15 +++++++++++++++
+ tests/qemuxml2argvtest.c                          |  1 +
+ 3 files changed, 23 insertions(+), 4 deletions(-)
+ create mode 100644 tests/qemuxml2argvdata/serial-unix-missing-source.xml
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index a881b43b51..240b33f28c 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -5523,11 +5523,14 @@ virDomainChrSourceDefValidate(const virDomainChrSourceDef *def,
+         break;
+ 
+     case VIR_DOMAIN_CHR_TYPE_UNIX:
+-        /* path can be auto generated */
++        /* The source path can be auto generated for certain specific
++         * types of channels, but in most cases we should report an
++         * error if the user didn't provide it */
+         if (!def->data.nix.path &&
+-            (!chr_def ||
+-             (chr_def->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN &&
+-              chr_def->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO))) {
++            !(chr_def &&
++              chr_def->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL &&
++              (chr_def->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN ||
++               chr_def->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO))) {
+             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                            _("Missing source path attribute for char device"));
+             return -1;
+diff --git a/tests/qemuxml2argvdata/serial-unix-missing-source.xml b/tests/qemuxml2argvdata/serial-unix-missing-source.xml
+new file mode 100644
+index 0000000000..1e1221f12d
+--- /dev/null
++++ b/tests/qemuxml2argvdata/serial-unix-missing-source.xml
+@@ -0,0 +1,15 @@
++<domain type='qemu'>
++  <name>guest</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>1048576</memory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='aarch64' machine='virt'>hvm</type>
++  </os>
++  <devices>
++    <emulator>/usr/bin/qemu-system-aarch64</emulator>
++    <serial type='unix'>
++      <target type='pci-serial'/>
++    </serial>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 608a2b6ce3..ebe9c8a131 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -1363,6 +1363,7 @@ mymain(void)
+     DO_TEST("serial-unix-chardev",
+             QEMU_CAPS_DEVICE_ISA_SERIAL);
+     DO_TEST_CAPS_LATEST("serial-unix-chardev");
++    DO_TEST_PARSE_ERROR("serial-unix-missing-source", NONE);
+     DO_TEST("serial-tcp-chardev",
+             QEMU_CAPS_DEVICE_ISA_SERIAL);
+     DO_TEST("serial-udp-chardev",
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-conf-Introduce-new-hostdev-attribute-display.patch b/SOURCES/libvirt-conf-Introduce-new-hostdev-attribute-display.patch
new file mode 100644
index 0000000..2dc0045
--- /dev/null
+++ b/SOURCES/libvirt-conf-Introduce-new-hostdev-attribute-display.patch
@@ -0,0 +1,416 @@
+From 5ad0f7cc1b2444ee9355229316fb008919d22c71 Mon Sep 17 00:00:00 2001
+Message-Id: <5ad0f7cc1b2444ee9355229316fb008919d22c71@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:04:02 +0200
+Subject: [PATCH] conf: Introduce new <hostdev> attribute 'display'
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+QEMU 2.12 introduced a new type of display for mediated devices using
+vfio-pci backend which allows a mediated device to be used as a VGA
+compatible device as an alternative to an emulated video device. QEMU
+exposes this feature via a vfio device property 'display' with supported
+values 'on/off/auto' (libvirt will default to 'off').
+
+This patch adds the necessary bits to domain config handling in order to
+expose this feature. Since there's no convenient way for libvirt to come
+up with usable defaults for the display setting, simply because libvirt
+is not able to figure out which of the display implementations - dma-buf
+which requires OpenGL support vs vfio regions which doesn't need OpenGL
+(works with OpenGL enabled too) - the underlying mdev uses.
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit d54e45b6edd7623e488a19e30bc4148a21fa8b03)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/formatdomain.html.in                     | 20 +++-
+ docs/schemas/domaincommon.rng                 |  5 +
+ src/conf/domain_conf.c                        | 19 +++-
+ src/conf/domain_conf.h                        |  1 +
+ src/qemu/qemu_domain.c                        | 98 ++++++++++++++++++-
+ .../qemuxml2argvdata/hostdev-mdev-display.xml | 39 ++++++++
+ .../hostdev-mdev-display.xml                  | 47 +++++++++
+ tests/qemuxml2xmltest.c                       |  1 +
+ 8 files changed, 222 insertions(+), 8 deletions(-)
+ create mode 100644 tests/qemuxml2argvdata/hostdev-mdev-display.xml
+ create mode 100644 tests/qemuxml2xmloutdata/hostdev-mdev-display.xml
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index 9dd22554ad..3554c3dc30 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -4510,9 +4510,23 @@
+           guest. Currently, <code>model='vfio-pci'</code> and
+           <code>model='vfio-ccw'</code> (<span class="since">Since 4.4.0</span>)
+           is supported. Refer <a href="drvnodedev.html#MDEV">MDEV</a> to create
+-          a mediated device on the host. There are also some implications on the
+-          usage of guest's address type depending on the <code>model</code>
+-          attribute, see the <code>address</code> element below.
++          a mediated device on the host.
++          <span class="since">Since 4.6.0 (QEMU 2.12)</span> an optional
++          <code>display</code> attribute may be used to enable or disable
++          support for an accelerated remote desktop backed by a mediated
++          device (such as NVIDIA vGPU or Intel GVT-g) as an alternative to
++          emulated <a href="#elementsVideo">video devices</a>. This attribute
++          is limited to <code>model='vfio-pci'</code> only. Supported values
++          are either <code>on</code> or <code>off</code> (default is 'off').
++          It is required to use a
++          <a href="#elementsGraphics">graphical framebuffer</a> in order to
++          use this attribute, currently only supported with VNC, Spice and
++          egl-headless graphics devices.
++          <p>
++            Note: There are also some implications on the usage of guest's
++            address type depending on the <code>model</code> attribute,
++            see the <code>address</code> element below.
++          </p>
+           </dd>
+         </dl>
+         <p>
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index 157726752c..be8430ab22 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -4579,6 +4579,11 @@
+         <value>vfio-ccw</value>
+       </choice>
+     </attribute>
++    <optional>
++      <attribute name="display">
++        <ref name="virOnOff"/>
++      </attribute>
++    </optional>
+     <element name="source">
+       <ref name="mdevaddress"/>
+     </element>
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 72086f9e86..830c298158 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -7656,6 +7656,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
+     char *rawio = NULL;
+     char *backendStr = NULL;
+     char *model = NULL;
++    char *display = NULL;
+     int backend;
+     int ret = -1;
+     virDomainHostdevSubsysPCIPtr pcisrc = &def->source.subsys.u.pci;
+@@ -7675,6 +7676,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
+     sgio = virXMLPropString(node, "sgio");
+     rawio = virXMLPropString(node, "rawio");
+     model = virXMLPropString(node, "model");
++    display = virXMLPropString(node, "display");
+ 
+     /* @type is passed in from the caller rather than read from the
+      * xml document, because it is specified in different places for
+@@ -7762,6 +7764,15 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
+                            model);
+             goto cleanup;
+         }
++
++        if (display &&
++            (mdevsrc->display = virTristateSwitchTypeFromString(display)) <= 0) {
++            virReportError(VIR_ERR_XML_ERROR,
++                           _("unknown value '%s' for <hostdev> attribute "
++                             "'display'"),
++                           display);
++            goto cleanup;
++        }
+     }
+ 
+     switch (def->source.subsys.type) {
+@@ -7815,6 +7826,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
+     VIR_FREE(rawio);
+     VIR_FREE(backendStr);
+     VIR_FREE(model);
++    VIR_FREE(display);
+     return ret;
+ }
+ 
+@@ -26568,9 +26580,14 @@ virDomainHostdevDefFormat(virBufferPtr buf,
+                               virTristateBoolTypeToString(scsisrc->rawio));
+         }
+ 
+-        if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV)
++        if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV) {
+             virBufferAsprintf(buf, " model='%s'",
+                               virMediatedDeviceModelTypeToString(mdevsrc->model));
++            if (mdevsrc->display != VIR_TRISTATE_SWITCH_ABSENT)
++                virBufferAsprintf(buf, " display='%s'",
++                                  virTristateSwitchTypeToString(mdevsrc->display));
++        }
++
+     }
+     virBufferAddLit(buf, ">\n");
+     virBufferAdjustIndent(buf, 2);
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index 3deda1d978..8ca9558ceb 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -382,6 +382,7 @@ typedef struct _virDomainHostdevSubsysMediatedDev virDomainHostdevSubsysMediated
+ typedef virDomainHostdevSubsysMediatedDev *virDomainHostdevSubsysMediatedDevPtr;
+ struct _virDomainHostdevSubsysMediatedDev {
+     int model;                          /* enum virMediatedDeviceModelType */
++    int display; /* virTristateSwitch */
+     char uuidstr[VIR_UUID_STRING_BUFLEN];   /* mediated device's uuid string */
+ };
+ 
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 9498594857..5337f1ce55 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -4451,9 +4451,48 @@ qemuDomainDeviceDefValidateNetwork(const virDomainNetDef *net)
+ 
+ 
+ static int
+-qemuDomainDeviceDefValidateHostdev(const virDomainHostdevDef *hostdev,
+-                                   const virDomainDef *def)
++qemuDomainMdevDefValidate(const virDomainHostdevSubsysMediatedDev *mdevsrc,
++                          const virDomainDef *def,
++                          virQEMUCapsPtr qemuCaps)
+ {
++    if (mdevsrc->display == VIR_TRISTATE_SWITCH_ABSENT)
++        return 0;
++
++    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VFIO_PCI_DISPLAY)) {
++        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                       _("display property of device vfio-pci is "
++                         "not supported by this version of QEMU"));
++        return -1;
++    }
++
++    if (mdevsrc->model != VIR_MDEV_MODEL_TYPE_VFIO_PCI) {
++        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                       _("<hostdev> attribute 'display' is only supported"
++                         " with model='vfio-pci'"));
++
++        return -1;
++    }
++
++    if (mdevsrc->display == VIR_TRISTATE_SWITCH_ON) {
++        if (def->ngraphics == 0) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                           _("graphics device is needed for attribute value "
++                             "'display=on' in <hostdev>"));
++            return -1;
++        }
++    }
++
++    return 0;
++}
++
++
++static int
++qemuDomainDeviceDefValidateHostdev(const virDomainHostdevDef *hostdev,
++                                   const virDomainDef *def,
++                                   virQEMUCapsPtr qemuCaps)
++{
++    const virDomainHostdevSubsysMediatedDev *mdevsrc;
++
+     /* forbid capabilities mode hostdev in this kind of hypervisor */
+     if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES) {
+         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+@@ -4463,6 +4502,24 @@ qemuDomainDeviceDefValidateHostdev(const virDomainHostdevDef *hostdev,
+         return -1;
+     }
+ 
++    if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) {
++        switch ((virDomainHostdevSubsysType) hostdev->source.subsys.type) {
++        case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
++        case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
++        case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
++        case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
++            break;
++        case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
++            mdevsrc = &hostdev->source.subsys.u.mdev;
++            return qemuDomainMdevDefValidate(mdevsrc, def, qemuCaps);
++        case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
++        default:
++            virReportEnumRangeError(virDomainHostdevSubsysType,
++                                    hostdev->source.subsys.type);
++            return -1;
++        }
++    }
++
+     return 0;
+ }
+ 
+@@ -5595,7 +5652,8 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
+         break;
+ 
+     case VIR_DOMAIN_DEVICE_HOSTDEV:
+-        ret = qemuDomainDeviceDefValidateHostdev(dev->data.hostdev, def);
++        ret = qemuDomainDeviceDefValidateHostdev(dev->data.hostdev, def,
++                                                 qemuCaps);
+         break;
+ 
+     case VIR_DOMAIN_DEVICE_VIDEO:
+@@ -6205,6 +6263,35 @@ qemuDomainVsockDefPostParse(virDomainVsockDefPtr vsock)
+ }
+ 
+ 
++static int
++qemuDomainHostdevDefMdevPostParse(virDomainHostdevSubsysMediatedDevPtr mdevsrc,
++                                  virQEMUCapsPtr qemuCaps)
++{
++    /* QEMU 2.12 added support for vfio-pci display type, we default to
++     * 'display=off' to stay safe from future changes */
++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VFIO_PCI_DISPLAY) &&
++        mdevsrc->display == VIR_TRISTATE_SWITCH_ABSENT)
++        mdevsrc->display = VIR_TRISTATE_SWITCH_OFF;
++
++    return 0;
++}
++
++
++static int
++qemuDomainHostdevDefPostParse(virDomainHostdevDefPtr hostdev,
++                              virQEMUCapsPtr qemuCaps)
++{
++    virDomainHostdevSubsysPtr subsys = &hostdev->source.subsys;
++
++    if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
++        hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV &&
++        qemuDomainHostdevDefMdevPostParse(&subsys->u.mdev, qemuCaps) < 0)
++        return -1;
++
++    return 0;
++}
++
++
+ static int
+ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
+                              const virDomainDef *def,
+@@ -6255,11 +6342,14 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
+         ret = qemuDomainVsockDefPostParse(dev->data.vsock);
+         break;
+ 
++    case VIR_DOMAIN_DEVICE_HOSTDEV:
++        ret = qemuDomainHostdevDefPostParse(dev->data.hostdev, qemuCaps);
++        break;
++
+     case VIR_DOMAIN_DEVICE_LEASE:
+     case VIR_DOMAIN_DEVICE_FS:
+     case VIR_DOMAIN_DEVICE_INPUT:
+     case VIR_DOMAIN_DEVICE_SOUND:
+-    case VIR_DOMAIN_DEVICE_HOSTDEV:
+     case VIR_DOMAIN_DEVICE_WATCHDOG:
+     case VIR_DOMAIN_DEVICE_GRAPHICS:
+     case VIR_DOMAIN_DEVICE_HUB:
+diff --git a/tests/qemuxml2argvdata/hostdev-mdev-display.xml b/tests/qemuxml2argvdata/hostdev-mdev-display.xml
+new file mode 100644
+index 0000000000..f37e08e1b9
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hostdev-mdev-display.xml
+@@ -0,0 +1,39 @@
++<domain type='qemu'>
++  <name>QEMUGuest2</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest2'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <controller type='ide' index='0'>
++    </controller>
++    <graphics type='vnc'/>
++    <hostdev mode='subsystem' type='mdev' model='vfio-pci' display='on'>
++      <source>
++        <address uuid='53764d0e-85a0-42b4-af5c-2046b460b1dc'/>
++      </source>
++    </hostdev>
++    <video>
++      <model type='qxl' heads='1'/>
++    </video>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2xmloutdata/hostdev-mdev-display.xml b/tests/qemuxml2xmloutdata/hostdev-mdev-display.xml
+new file mode 100644
+index 0000000000..94c11b1199
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/hostdev-mdev-display.xml
+@@ -0,0 +1,47 @@
++<domain type='qemu'>
++  <name>QEMUGuest2</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest2'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <controller type='ide' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
++    </controller>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <graphics type='vnc' port='-1' autoport='yes'>
++      <listen type='address'/>
++    </graphics>
++    <video>
++      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
++    </video>
++    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'>
++      <source>
++        <address uuid='53764d0e-85a0-42b4-af5c-2046b460b1dc'/>
++      </source>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
++    </hostdev>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index fa57221d62..e418e67f6c 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -479,6 +479,7 @@ mymain(void)
+     DO_TEST("hostdev-pci-address", NONE);
+     DO_TEST("hostdev-vfio", NONE);
+     DO_TEST("hostdev-mdev-precreated", NONE);
++    DO_TEST("hostdev-mdev-display", QEMU_CAPS_VFIO_PCI_DISPLAY);
+     DO_TEST("pci-rom", NONE);
+     DO_TEST("pci-rom-disabled", NONE);
+     DO_TEST("pci-rom-disabled-invalid", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Introduce-new-video-type-none.patch b/SOURCES/libvirt-conf-Introduce-new-video-type-none.patch
new file mode 100644
index 0000000..e62369b
--- /dev/null
+++ b/SOURCES/libvirt-conf-Introduce-new-video-type-none.patch
@@ -0,0 +1,504 @@
+From 2010df9c6a8a4ff984e3f1b697398da648342953 Mon Sep 17 00:00:00 2001
+Message-Id: <2010df9c6a8a4ff984e3f1b697398da648342953@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:04:05 +0200
+Subject: [PATCH] conf: Introduce new video type 'none'
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Historically, we've always enabled an emulated video device every time we
+see that graphics should be supported with a guest. With the appearance
+of mediated devices which can support QEMU's vfio-display capability,
+users might want to use such a device as the only video device.
+Therefore introduce a new, effectively a 'disable', type for video
+device.
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit d48813e81af798e3027edcc2f41be2630111ba65)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/formatdomain.html.in                     | 13 +++-
+ docs/schemas/domaincommon.rng                 |  1 +
+ src/conf/domain_conf.c                        | 61 +++++++++++++------
+ src/conf/domain_conf.h                        |  1 +
+ src/qemu/qemu_command.c                       | 12 +++-
+ src/qemu/qemu_domain.c                        |  2 +
+ src/qemu/qemu_domain_address.c                |  7 ++-
+ tests/domaincapsschemadata/full.xml           |  1 +
+ .../video-invalid-multiple-devices.xml        | 33 ++++++++++
+ tests/qemuxml2argvdata/video-none-device.args | 27 ++++++++
+ tests/qemuxml2argvdata/video-none-device.xml  | 39 ++++++++++++
+ tests/qemuxml2argvtest.c                      |  4 +-
+ .../qemuxml2xmloutdata/video-none-device.xml  | 42 +++++++++++++
+ tests/qemuxml2xmltest.c                       |  1 +
+ 14 files changed, 220 insertions(+), 24 deletions(-)
+ create mode 100644 tests/qemuxml2argvdata/video-invalid-multiple-devices.xml
+ create mode 100644 tests/qemuxml2argvdata/video-none-device.args
+ create mode 100644 tests/qemuxml2argvdata/video-none-device.xml
+ create mode 100644 tests/qemuxml2xmloutdata/video-none-device.xml
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index 0e8f0a125f..42acf7a828 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -6666,9 +6666,18 @@ qemu-kvm -net nic,model=? /dev/null
+           The <code>model</code> element has a mandatory <code>type</code>
+           attribute which takes the value "vga", "cirrus", "vmvga", "xen",
+           "vbox", "qxl" (<span class="since">since 0.8.6</span>),
+-          "virtio" (<span class="since">since 1.3.0</span>)
+-          or "gop" (<span class="since">since 3.2.0</span>)
++          "virtio" (<span class="since">since 1.3.0</span>),
++          "gop" (<span class="since">since 3.2.0</span>), or
++          "none" (<span class="since">since 4.6.0</span>)
+           depending on the hypervisor features available.
++          The purpose of the type <code>none</code> is to instruct libvirt not
++          to add a default video device in the guest (see the paragraph above).
++          This legacy behaviour can be inconvenient in cases where GPU mediated
++          devices are meant to be the only rendering device within a guest and
++          so specifying another <code>video</code> device along with type
++          <code>none</code>.
++          Refer to <a id="elementsHostDev">Host device assignment</a> to see
++          how to add a mediated device into a guest.
+         </p>
+         <p>
+           You can provide the amount of video memory in kibibytes (blocks of
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index be8430ab22..ac04af51a1 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -3454,6 +3454,7 @@
+                 <value>vbox</value>
+                 <value>virtio</value>
+                 <value>gop</value>
++                <value>none</value>
+               </choice>
+             </attribute>
+             <group>
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 830c298158..23288aa01b 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -590,7 +590,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
+               "qxl",
+               "parallels",
+               "virtio",
+-              "gop")
++              "gop",
++              "none")
+ 
+ VIR_ENUM_IMPL(virDomainVideoVGAConf, VIR_DOMAIN_VIDEO_VGACONF_LAST,
+               "io",
+@@ -5106,22 +5107,30 @@ virDomainDefPostParseVideo(virDomainDefPtr def,
+     if (def->nvideos == 0)
+         return 0;
+ 
+-    virDomainDeviceDef device = {
+-        .type = VIR_DOMAIN_DEVICE_VIDEO,
+-        .data.video = def->videos[0],
+-    };
++    if (def->videos[0]->type == VIR_DOMAIN_VIDEO_TYPE_NONE) {
++        /* we don't want to format any values we automatically fill in for
++         * videos into the XML, so clear them
++         */
++        virDomainVideoDefClear(def->videos[0]);
++        def->videos[0]->type = VIR_DOMAIN_VIDEO_TYPE_NONE;
++    } else {
++        virDomainDeviceDef device = {
++            .type = VIR_DOMAIN_DEVICE_VIDEO,
++            .data.video = def->videos[0],
++        };
+ 
+-    /* Mark the first video as primary. If the user specified
+-     * primary="yes", the parser already inserted the device at
+-     * def->videos[0]
+-     */
+-    def->videos[0]->primary = true;
++        /* Mark the first video as primary. If the user specified
++         * primary="yes", the parser already inserted the device at
++         * def->videos[0]
++         */
++        def->videos[0]->primary = true;
+ 
+-    /* videos[0] might have been added in AddImplicitDevices, after we've
+-     * done the per-device post-parse */
+-    if (virDomainDefPostParseDeviceIterator(def, &device,
+-                                            NULL, opaque) < 0)
+-        return -1;
++        /* videos[0] might have been added in AddImplicitDevices, after we've
++         * done the per-device post-parse */
++        if (virDomainDefPostParseDeviceIterator(def, &device,
++                                                NULL, opaque) < 0)
++            return -1;
++    }
+ 
+     return 0;
+ }
+@@ -5670,13 +5679,30 @@ virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev)
+ 
+ 
+ static int
+-virDomainVideoDefValidate(const virDomainVideoDef *video)
++virDomainVideoDefValidate(const virDomainVideoDef *video,
++                          const virDomainDef *def)
+ {
++    size_t i;
++
+     if (video->type == VIR_DOMAIN_VIDEO_TYPE_DEFAULT) {
+         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                        _("missing video model and cannot determine default"));
+         return -1;
+     }
++
++    /* it doesn't make sense to pair video device type 'none' with any other
++     * types, there can be only a single video device in such case
++     */
++    for (i = 0; i < def->nvideos; i++) {
++        if (def->videos[i]->type == VIR_DOMAIN_VIDEO_TYPE_NONE &&
++            def->nvideos > 1) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                           _("a '%s' video type must be the only video device "
++                             "defined for the domain"));
++            return -1;
++        }
++    }
++
+     return 0;
+ }
+ 
+@@ -5738,7 +5764,7 @@ virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
+         return virDomainHostdevDefValidate(dev->data.hostdev);
+ 
+     case VIR_DOMAIN_DEVICE_VIDEO:
+-        return virDomainVideoDefValidate(dev->data.video);
++        return virDomainVideoDefValidate(dev->data.video, def);
+ 
+     case VIR_DOMAIN_DEVICE_MEMORY:
+         return virDomainMemoryDefValidate(dev->data.memory);
+@@ -15048,6 +15074,7 @@ virDomainVideoDefaultRAM(const virDomainDef *def,
+     case VIR_DOMAIN_VIDEO_TYPE_PARALLELS:
+     case VIR_DOMAIN_VIDEO_TYPE_VIRTIO:
+     case VIR_DOMAIN_VIDEO_TYPE_GOP:
++    case VIR_DOMAIN_VIDEO_TYPE_NONE:
+     case VIR_DOMAIN_VIDEO_TYPE_LAST:
+     default:
+         return 0;
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index 8ca9558ceb..5e2f21dea3 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -1424,6 +1424,7 @@ typedef enum {
+     VIR_DOMAIN_VIDEO_TYPE_PARALLELS, /* pseudo device for VNC in containers */
+     VIR_DOMAIN_VIDEO_TYPE_VIRTIO,
+     VIR_DOMAIN_VIDEO_TYPE_GOP,
++    VIR_DOMAIN_VIDEO_TYPE_NONE,
+ 
+     VIR_DOMAIN_VIDEO_TYPE_LAST
+ } virDomainVideoType;
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 1fce45134f..954265feb0 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -105,7 +105,8 @@ VIR_ENUM_IMPL(qemuVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
+               "qxl",
+               "", /* don't support parallels */
+               "", /* no need for virtio */
+-              "" /* don't support gop */);
++              "" /* don't support gop */,
++              "" /* 'none' doesn't make sense here */);
+ 
+ VIR_ENUM_DECL(qemuDeviceVideo)
+ 
+@@ -119,7 +120,8 @@ VIR_ENUM_IMPL(qemuDeviceVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
+               "qxl-vga",
+               "", /* don't support parallels */
+               "virtio-vga",
+-              "" /* don't support gop */);
++              "" /* don't support gop */,
++              "" /* 'none' doesn't make sense here */);
+ 
+ VIR_ENUM_DECL(qemuDeviceVideoSecondary)
+ 
+@@ -133,7 +135,8 @@ VIR_ENUM_IMPL(qemuDeviceVideoSecondary, VIR_DOMAIN_VIDEO_TYPE_LAST,
+               "qxl",
+               "", /* don't support parallels */
+               "virtio-gpu",
+-              "" /* don't support gop */);
++              "" /* don't support gop */,
++              "" /* 'none' doesn't make sense here */);
+ 
+ VIR_ENUM_DECL(qemuSoundCodec)
+ 
+@@ -4421,6 +4424,9 @@ qemuBuildVideoCommandLine(virCommandPtr cmd,
+         char *str = NULL;
+         virDomainVideoDefPtr video = def->videos[i];
+ 
++        if (video->type == VIR_DOMAIN_VIDEO_TYPE_NONE)
++            continue;
++
+         if (video->primary) {
+             if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY)) {
+ 
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 5337f1ce55..508846116b 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -4528,6 +4528,8 @@ static int
+ qemuDomainDeviceDefValidateVideo(const virDomainVideoDef *video)
+ {
+     switch ((virDomainVideoType) video->type) {
++    case VIR_DOMAIN_VIDEO_TYPE_NONE:
++        return 0;
+     case VIR_DOMAIN_VIDEO_TYPE_XEN:
+     case VIR_DOMAIN_VIDEO_TYPE_VBOX:
+     case VIR_DOMAIN_VIDEO_TYPE_PARALLELS:
+diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
+index ab2ac022f1..e6996934b8 100644
+--- a/src/qemu/qemu_domain_address.c
++++ b/src/qemu/qemu_domain_address.c
+@@ -821,6 +821,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
+ 
+         case VIR_DOMAIN_VIDEO_TYPE_DEFAULT:
+         case VIR_DOMAIN_VIDEO_TYPE_GOP:
++        case VIR_DOMAIN_VIDEO_TYPE_NONE:
+         case VIR_DOMAIN_VIDEO_TYPE_LAST:
+             return 0;
+         }
+@@ -1532,7 +1533,8 @@ qemuDomainValidateDevicePCISlotsPIIX3(virDomainDefPtr def,
+             goto cleanup;
+     }
+ 
+-    if (def->nvideos > 0) {
++    if (def->nvideos > 0 &&
++        def->videos[0]->type != VIR_DOMAIN_VIDEO_TYPE_NONE) {
+         /* Because the PIIX3 integrated IDE/USB controllers are
+          * already at slot 1, when qemu looks for the first free slot
+          * to place the VGA controller (which is always the first
+@@ -1540,6 +1542,7 @@ qemuDomainValidateDevicePCISlotsPIIX3(virDomainDefPtr def,
+          * at slot 2.
+          */
+         virDomainVideoDefPtr primaryVideo = def->videos[0];
++
+         if (virDeviceInfoPCIAddressWanted(&primaryVideo->info)) {
+             memset(&tmp_addr, 0, sizeof(tmp_addr));
+             tmp_addr.slot = 2;
+@@ -2105,6 +2108,8 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
+ 
+     /* Video devices */
+     for (i = 0; i < def->nvideos; i++) {
++        if (def->videos[i]->type == VIR_DOMAIN_VIDEO_TYPE_NONE)
++            continue;
+ 
+         if (!virDeviceInfoPCIAddressWanted(&def->videos[i]->info))
+             continue;
+diff --git a/tests/domaincapsschemadata/full.xml b/tests/domaincapsschemadata/full.xml
+index 154c4a6fe9..eafba1ae5b 100644
+--- a/tests/domaincapsschemadata/full.xml
++++ b/tests/domaincapsschemadata/full.xml
+@@ -74,6 +74,7 @@
+         <value>parallels</value>
+         <value>virtio</value>
+         <value>gop</value>
++        <value>none</value>
+       </enum>
+     </video>
+     <hostdev supported='yes'>
+diff --git a/tests/qemuxml2argvdata/video-invalid-multiple-devices.xml b/tests/qemuxml2argvdata/video-invalid-multiple-devices.xml
+new file mode 100644
+index 0000000000..3f105efaae
+--- /dev/null
++++ b/tests/qemuxml2argvdata/video-invalid-multiple-devices.xml
+@@ -0,0 +1,33 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219100</memory>
++  <currentMemory unit='KiB'>219100</currentMemory>
++  <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'/>
++    <controller type='ide' index='0'/>
++    <controller type='pci' index='0' model='pci-root'/>
++    <video>
++      <model type='qxl'/>
++    </video>
++    <video>
++      <model type='none'/>
++    </video>
++    <memballoon model='virtio'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvdata/video-none-device.args b/tests/qemuxml2argvdata/video-none-device.args
+new file mode 100644
+index 0000000000..1b03c0cb97
+--- /dev/null
++++ b/tests/qemuxml2argvdata/video-none-device.args
+@@ -0,0 +1,27 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name QEMUGuest1 \
++-S \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
++server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot c \
++-usb \
++-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
++-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
++-vnc 127.0.0.1:0 \
++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
+diff --git a/tests/qemuxml2argvdata/video-none-device.xml b/tests/qemuxml2argvdata/video-none-device.xml
+new file mode 100644
+index 0000000000..4b591562b7
+--- /dev/null
++++ b/tests/qemuxml2argvdata/video-none-device.xml
+@@ -0,0 +1,39 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='ide' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <graphics type='vnc'/>
++    <video>
++      <model type='none'/>
++    </video>
++    <memballoon model='virtio'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
++    </memballoon>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 9237a4fb89..3cff4ffb5e 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -1998,7 +1998,9 @@ mymain(void)
+             QEMU_CAPS_DEVICE_VIRTIO_VGA,
+             QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
+             QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
+-    DO_TEST_PARSE_ERROR("video-invalid", NONE);
++    DO_TEST("video-none-device",
++            QEMU_CAPS_VNC);
++    DO_TEST_PARSE_ERROR("video-invalid-multiple-devices", NONE);
+ 
+     DO_TEST("virtio-rng-default",
+             QEMU_CAPS_DEVICE_VIRTIO_RNG,
+diff --git a/tests/qemuxml2xmloutdata/video-none-device.xml b/tests/qemuxml2xmloutdata/video-none-device.xml
+new file mode 100644
+index 0000000000..6e76b394fe
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/video-none-device.xml
+@@ -0,0 +1,42 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='ide' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <graphics type='vnc' port='-1' autoport='yes'>
++      <listen type='address'/>
++    </graphics>
++    <video>
++      <model type='none'/>
++    </video>
++    <memballoon model='virtio'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
++    </memballoon>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index e418e67f6c..e35644d479 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -1145,6 +1145,7 @@ mymain(void)
+             QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS,
+             QEMU_CAPS_VNC,
+             QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW);
++    DO_TEST("video-none-device", NONE);
+ 
+     DO_TEST("intel-iommu",
+             QEMU_CAPS_DEVICE_INTEL_IOMMU);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Introduce-virDomainDefPostParseMemtune.patch b/SOURCES/libvirt-conf-Introduce-virDomainDefPostParseMemtune.patch
new file mode 100644
index 0000000..c1d3a64
--- /dev/null
+++ b/SOURCES/libvirt-conf-Introduce-virDomainDefPostParseMemtune.patch
@@ -0,0 +1,210 @@
+From cb0d627bf064a14c83f3d34e8b73d77ed1733843 Mon Sep 17 00:00:00 2001
+Message-Id: <cb0d627bf064a14c83f3d34e8b73d77ed1733843@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:54 +0200
+Subject: [PATCH] conf: Introduce virDomainDefPostParseMemtune
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Previously we were ignoring "nodeset" attribute for hugepage pages
+if there was no guest NUMA topology configured in the domain XML.
+Commit <fa6bdf6afa878b8d7c5ed71664ee72be8967cdc5> partially fixed
+that issue but it introduced a somehow valid regression.
+
+In case that there is no guest NUMA topology configured and the
+"nodeset" attribute is set to "0" it was accepted and was working
+properly even though it was not completely valid XML.
+
+This patch introduces a workaround that it will ignore the nodeset="0"
+only in case that there is no guest NUMA topology in order not to
+hit the validation error.
+
+After this commit the following XML configuration is valid:
+
+  <memoryBacking>
+    <hugepages>
+      <page size='2048' unit='KiB' nodeset='0'/>
+    </hugepages>
+  </memoryBacking>
+
+but this configuration remains invalid:
+
+  <memoryBacking>
+    <hugepages>
+      <page size='2048' unit='KiB' nodeset='0'/>
+      <page size='1048576' unit='KiB'/>
+    </hugepages>
+  </memoryBacking>
+
+The issue with the second configuration is that it was originally
+working, however changing the order of the <page> elements resolved
+into using different page size for the guest.  The code is written
+in a way that it expect only one page configured and always uses only
+the first page in case that there is no guest NUMA topology configured.
+See qemuBuildMemPathStr() function for details.
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1591235
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 0a476f152150f62306f9f8d124aa44e4adb9158c)
+
+Conflicts:
+    tests/qemuxml2argvdata/hugepages-nodeset.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.c                        | 27 +++++++++++++++++
+ tests/qemuxml2argvdata/hugepages-nodeset.args | 26 ++++++++++++++++
+ tests/qemuxml2argvtest.c                      |  2 +-
+ .../qemuxml2xmloutdata/hugepages-nodeset.xml  | 30 +++++++++++++++++++
+ tests/qemuxml2xmltest.c                       |  1 +
+ 5 files changed, 85 insertions(+), 1 deletion(-)
+ create mode 100644 tests/qemuxml2argvdata/hugepages-nodeset.args
+ create mode 100644 tests/qemuxml2xmloutdata/hugepages-nodeset.xml
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 98e833c5bb..8a43e607e9 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -4088,6 +4088,31 @@ virDomainDefPostParseMemory(virDomainDefPtr def,
+ }
+ 
+ 
++static void
++virDomainDefPostParseMemtune(virDomainDefPtr def)
++{
++    size_t i;
++
++    if (virDomainNumaGetNodeCount(def->numa) == 0) {
++        /* If guest NUMA is not configured and any hugepage page has nodemask
++         * set to "0" free and clear that nodemas, otherwise we would rise
++         * an error that there is no guest NUMA node configured. */
++        for (i = 0; i < def->mem.nhugepages; i++) {
++            ssize_t nextBit;
++
++            if (!def->mem.hugepages[i].nodemask)
++                continue;
++
++            nextBit = virBitmapNextSetBit(def->mem.hugepages[i].nodemask, 0);
++            if (nextBit < 0) {
++                virBitmapFree(def->mem.hugepages[i].nodemask);
++                def->mem.hugepages[i].nodemask = NULL;
++            }
++        }
++    }
++}
++
++
+ static int
+ virDomainDefAddConsoleCompat(virDomainDefPtr def)
+ {
+@@ -5155,6 +5180,8 @@ virDomainDefPostParseCommon(virDomainDefPtr def,
+     if (virDomainDefPostParseMemory(def, data->parseFlags) < 0)
+         return -1;
+ 
++    virDomainDefPostParseMemtune(def);
++
+     if (virDomainDefRejectDuplicateControllers(def) < 0)
+         return -1;
+ 
+diff --git a/tests/qemuxml2argvdata/hugepages-nodeset.args b/tests/qemuxml2argvdata/hugepages-nodeset.args
+new file mode 100644
+index 0000000000..d094be1252
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hugepages-nodeset.args
+@@ -0,0 +1,26 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name SomeDummyHugepagesGuest \
++-S \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 1024 \
++-mem-prealloc \
++-mem-path /dev/hugepages2M/libvirt/qemu/-1-SomeDummyHugepagesGu \
++-smp 2,sockets=2,cores=1,threads=1 \
++-uuid ef1bdff4-27f3-4e85-a807-5fb4d58463cc \
++-display none \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,\
++path=/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot c \
++-usb
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index f82bca2637..e6c0120670 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -960,7 +960,7 @@ mymain(void)
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
+     DO_TEST_PARSE_ERROR("hugepages-default-1G-nodeset-2M", NONE);
+-    DO_TEST_PARSE_ERROR("hugepages-nodeset", NONE);
++    DO_TEST("hugepages-nodeset", NONE);
+     DO_TEST_PARSE_ERROR("hugepages-nodeset-nonexist",
+                         QEMU_CAPS_DEVICE_PC_DIMM,
+                         QEMU_CAPS_OBJECT_MEMORY_FILE,
+diff --git a/tests/qemuxml2xmloutdata/hugepages-nodeset.xml b/tests/qemuxml2xmloutdata/hugepages-nodeset.xml
+new file mode 100644
+index 0000000000..ac219a7800
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/hugepages-nodeset.xml
+@@ -0,0 +1,30 @@
++<domain type='qemu'>
++  <name>SomeDummyHugepagesGuest</name>
++  <uuid>ef1bdff4-27f3-4e85-a807-5fb4d58463cc</uuid>
++  <memory unit='KiB'>1048576</memory>
++  <currentMemory unit='KiB'>1048576</currentMemory>
++  <memoryBacking>
++    <hugepages>
++      <page size='2048' unit='KiB'/>
++    </hugepages>
++  </memoryBacking>
++  <vcpu placement='static'>2</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index aa543e9e51..b76410b2c1 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -336,6 +336,7 @@ mymain(void)
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
++    DO_TEST("hugepages-nodeset", NONE);
+     DO_TEST("hugepages-numa-default-2M", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-numa-nodeset", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Introduce-virDomainDefPostParseVideo-helper.patch b/SOURCES/libvirt-conf-Introduce-virDomainDefPostParseVideo-helper.patch
new file mode 100644
index 0000000..92dd24b
--- /dev/null
+++ b/SOURCES/libvirt-conf-Introduce-virDomainDefPostParseVideo-helper.patch
@@ -0,0 +1,89 @@
+From 2f954b30573d57ab0b5d68364afa6168d00ca3e6 Mon Sep 17 00:00:00 2001
+Message-Id: <2f954b30573d57ab0b5d68364afa6168d00ca3e6@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:52 +0200
+Subject: [PATCH] conf: Introduce virDomainDefPostParseVideo helper
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Move the video post parse bits into a separate helper as the logic is
+going to be extended in the future.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 75aa179ad68f5845955128b9f047a43c8e5c9066)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.c | 45 ++++++++++++++++++++++++++++--------------
+ 1 file changed, 30 insertions(+), 15 deletions(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index d23b2861ef..db8e17dac4 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -5097,6 +5097,34 @@ virDomainDefBootOrderPostParse(virDomainDefPtr def)
+ }
+ 
+ 
++static int
++virDomainDefPostParseVideo(virDomainDefPtr def,
++                           void *opaque)
++{
++    if (def->nvideos == 0)
++        return 0;
++
++    virDomainDeviceDef device = {
++        .type = VIR_DOMAIN_DEVICE_VIDEO,
++        .data.video = def->videos[0],
++    };
++
++    /* Mark the first video as primary. If the user specified
++     * primary="yes", the parser already inserted the device at
++     * def->videos[0]
++     */
++    def->videos[0]->primary = true;
++
++    /* videos[0] might have been added in AddImplicitDevices, after we've
++     * done the per-device post-parse */
++    if (virDomainDefPostParseDeviceIterator(def, &device,
++                                            NULL, opaque) < 0)
++        return -1;
++
++    return 0;
++}
++
++
+ static int
+ virDomainDefPostParseCommon(virDomainDefPtr def,
+                             struct virDomainDefPostParseDeviceIteratorData *data)
+@@ -5133,21 +5161,8 @@ virDomainDefPostParseCommon(virDomainDefPtr def,
+     if (virDomainDefAddImplicitDevices(def) < 0)
+         return -1;
+ 
+-    if (def->nvideos != 0) {
+-        virDomainDeviceDef device = {
+-            .type = VIR_DOMAIN_DEVICE_VIDEO,
+-            .data.video = def->videos[0],
+-        };
+-
+-        /* Mark the first video as primary. If the user specified primary="yes",
+-         * the parser already inserted the device at def->videos[0] */
+-        def->videos[0]->primary = true;
+-
+-        /* videos[0] might have been added in AddImplicitDevices, after we've
+-         * done the per-device post-parse */
+-        if (virDomainDefPostParseDeviceIterator(def, &device, NULL, data) < 0)
+-            return -1;
+-    }
++    if (virDomainDefPostParseVideo(def, data) < 0)
++        return -1;
+ 
+     if (def->nserials != 0) {
+         virDomainDeviceDef device = {
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Introduce-virDomainGraphicsDefHasOpenGL-helper.patch b/SOURCES/libvirt-conf-Introduce-virDomainGraphicsDefHasOpenGL-helper.patch
new file mode 100644
index 0000000..2a7b4f6
--- /dev/null
+++ b/SOURCES/libvirt-conf-Introduce-virDomainGraphicsDefHasOpenGL-helper.patch
@@ -0,0 +1,105 @@
+From e6b37b93dd6e7ec133378aec04dd9c96e0ab57cb Mon Sep 17 00:00:00 2001
+Message-Id: <e6b37b93dd6e7ec133378aec04dd9c96e0ab57cb@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:04:00 +0200
+Subject: [PATCH] conf: Introduce virDomainGraphicsDefHasOpenGL helper
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+A simple helper which will loop through all the graphics elements and
+checks whether at least one of them enables OpenGL support, either by
+containing <gl enable='yes'/> or being of type 'egl-headless'.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Acked-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 425329181f1db19f34a8ffffc1da9afa7f323f13)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.c   | 43 ++++++++++++++++++++++++++++++++++++++++
+ src/conf/domain_conf.h   |  3 +++
+ src/libvirt_private.syms |  1 +
+ 3 files changed, 47 insertions(+)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index fa4dfafcff..08654ab41d 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -30284,3 +30284,46 @@ virDomainDefHasManagedPR(const virDomainDef *def)
+ 
+     return false;
+ }
++
++
++/**
++ * virDomainGraphicsDefHasOpenGL:
++ * @def: domain definition
++ *
++ * Returns true if a domain config contains at least one <graphics> element
++ * with OpenGL support enabled, false otherwise.
++ */
++bool
++virDomainGraphicsDefHasOpenGL(const virDomainDef *def)
++{
++    size_t i;
++
++    for (i = 0; i < def->ngraphics; i++) {
++        virDomainGraphicsDefPtr graphics = def->graphics[i];
++
++        /* we only care about OpenGL support for a given type here */
++        switch (graphics->type) {
++        case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
++        case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
++        case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
++            continue;
++        case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
++            if (graphics->data.sdl.gl == VIR_TRISTATE_BOOL_YES)
++                return true;
++
++            continue;
++        case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
++            if (graphics->data.spice.gl == VIR_TRISTATE_BOOL_YES)
++                return true;
++
++            continue;
++        case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
++            return true;
++
++        case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
++            break;
++        }
++    }
++
++    return false;
++}
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index 26f75b15d0..3deda1d978 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -3642,4 +3642,7 @@ virDomainDiskGetDetectZeroesMode(virDomainDiskDiscard discard,
+ bool
+ virDomainDefHasManagedPR(const virDomainDef *def);
+ 
++bool
++virDomainGraphicsDefHasOpenGL(const virDomainDef *def);
++
+ #endif /* __DOMAIN_CONF_H */
+diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
+index 5bd08d3f67..86846f3b08 100644
+--- a/src/libvirt_private.syms
++++ b/src/libvirt_private.syms
+@@ -368,6 +368,7 @@ virDomainGetFilesystemForTarget;
+ virDomainGraphicsAuthConnectedTypeFromString;
+ virDomainGraphicsAuthConnectedTypeToString;
+ virDomainGraphicsDefFree;
++virDomainGraphicsDefHasOpenGL;
+ virDomainGraphicsGetListen;
+ virDomainGraphicsListenAppendAddress;
+ virDomainGraphicsListenAppendSocket;
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Introduce-virDomainVideoDefClear-helper.patch b/SOURCES/libvirt-conf-Introduce-virDomainVideoDefClear-helper.patch
new file mode 100644
index 0000000..cc24338
--- /dev/null
+++ b/SOURCES/libvirt-conf-Introduce-virDomainVideoDefClear-helper.patch
@@ -0,0 +1,84 @@
+From f60ad6c8636b58d8559963aaf2e445bb4dd3db63 Mon Sep 17 00:00:00 2001
+Message-Id: <f60ad6c8636b58d8559963aaf2e445bb4dd3db63@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:51 +0200
+Subject: [PATCH] conf: Introduce virDomainVideoDefClear helper
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Future patches rely on the ability to reset the contents of the
+virDomainVideoDef structure rather than re-allocating it.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit f317b1e5c57291644c841cb620eda86dac8642a1)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.c   | 14 +++++++++++++-
+ src/conf/domain_conf.h   |  1 +
+ src/libvirt_private.syms |  1 +
+ 3 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 70eb45f03a..d23b2861ef 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -2538,7 +2538,8 @@ virDomainVideoDefNew(void)
+ }
+ 
+ 
+-void virDomainVideoDefFree(virDomainVideoDefPtr def)
++void
++virDomainVideoDefClear(virDomainVideoDefPtr def)
+ {
+     if (!def)
+         return;
+@@ -2548,6 +2549,17 @@ void virDomainVideoDefFree(virDomainVideoDefPtr def)
+     VIR_FREE(def->accel);
+     VIR_FREE(def->virtio);
+     VIR_FREE(def->driver);
++
++    memset(def, 0, sizeof(*def));
++}
++
++
++void virDomainVideoDefFree(virDomainVideoDefPtr def)
++{
++    if (!def)
++        return;
++
++    virDomainVideoDefClear(def);
+     VIR_FREE(def);
+ }
+ 
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index 41d27482fb..1fc1734bcc 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -2884,6 +2884,7 @@ void virDomainNVRAMDefFree(virDomainNVRAMDefPtr def);
+ void virDomainWatchdogDefFree(virDomainWatchdogDefPtr def);
+ virDomainVideoDefPtr virDomainVideoDefNew(void);
+ void virDomainVideoDefFree(virDomainVideoDefPtr def);
++void virDomainVideoDefClear(virDomainVideoDefPtr def);
+ virDomainHostdevDefPtr virDomainHostdevDefNew(void);
+ void virDomainHostdevDefClear(virDomainHostdevDefPtr def);
+ void virDomainHostdevDefFree(virDomainHostdevDefPtr def);
+diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
+index 5499a368c0..5bd08d3f67 100644
+--- a/src/libvirt_private.syms
++++ b/src/libvirt_private.syms
+@@ -567,6 +567,7 @@ virDomainTPMModelTypeToString;
+ virDomainUSBDeviceDefForeach;
+ virDomainVideoDefaultRAM;
+ virDomainVideoDefaultType;
++virDomainVideoDefClear;
+ virDomainVideoDefFree;
+ virDomainVideoDefNew;
+ virDomainVideoTypeFromString;
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Move-VFIO-AP-validation-from-post-parse-to-QEMU-validation-code.patch b/SOURCES/libvirt-conf-Move-VFIO-AP-validation-from-post-parse-to-QEMU-validation-code.patch
new file mode 100644
index 0000000..c2d9bdb
--- /dev/null
+++ b/SOURCES/libvirt-conf-Move-VFIO-AP-validation-from-post-parse-to-QEMU-validation-code.patch
@@ -0,0 +1,122 @@
+From 680d10a61dfab864b5e1bca9e1f197ae06e62d87 Mon Sep 17 00:00:00 2001
+Message-Id: <680d10a61dfab864b5e1bca9e1f197ae06e62d87@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Fri, 30 Nov 2018 15:49:26 +0100
+Subject: [PATCH] conf: Move VFIO AP validation from post parse to QEMU
+ validation code
+
+VFIO AP has a limitation on a single device per domain, however, when
+commit 11708641 added the support for vfio-ap, check for this limitation
+was performed as part of the post parse code. Generally, checks like that
+should be performed within the driver's validation callback to eliminate
+any slight chance of failing in post parse, which could potentially
+result in the domain XML config vanishing.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
+(cherry picked from commit 25dde373730545894f60ce5b1497f19d61714c69)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1508146
+
+Signed-off-by: Pino Toscano <ptoscano@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/conf/domain_conf.c | 28 ----------------------------
+ src/qemu/qemu_domain.c | 28 +++++++++++++++++++++++++++-
+ 2 files changed, 27 insertions(+), 29 deletions(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index ea7152eb94..e013e9f0c5 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -4325,31 +4325,6 @@ virDomainDefPostParseGraphics(virDomainDef *def)
+ }
+ 
+ 
+-static int
+-virDomainDefPostParseHostdev(virDomainDefPtr def)
+-{
+-    size_t i;
+-    bool vfioap_found = false;
+-
+-    /* verify settings of hostdevs vfio-ap */
+-    for (i = 0; i < def->nhostdevs; i++) {
+-        virDomainHostdevDefPtr hostdev = def->hostdevs[i];
+-
+-        if (virHostdevIsMdevDevice(hostdev) &&
+-            hostdev->source.subsys.u.mdev.model == VIR_MDEV_MODEL_TYPE_VFIO_AP) {
+-            if (vfioap_found) {
+-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+-                               _("Only one hostdev of model vfio-ap is "
+-                                 "supported"));
+-                return -1;
+-            }
+-            vfioap_found = true;
+-        }
+-    }
+-    return 0;
+-}
+-
+-
+ /**
+  * virDomainDriveAddressIsUsedByDisk:
+  * @def: domain definition containing the disks to check
+@@ -5262,9 +5237,6 @@ virDomainDefPostParseCommon(virDomainDefPtr def,
+ 
+     virDomainDefPostParseGraphics(def);
+ 
+-    if (virDomainDefPostParseHostdev(def) < 0)
+-        return -1;
+-
+     if (virDomainDefPostParseCPU(def) < 0)
+         return -1;
+ 
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 4898d58733..08f479fa1d 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -4486,6 +4486,32 @@ qemuDomainMdevDefVFIOPCIValidate(const virDomainHostdevSubsysMediatedDev *dev,
+ }
+ 
+ 
++static int
++qemuDomainMdevDefVFIOAPValidate(const virDomainDef *def)
++{
++    size_t i;
++    bool vfioap_found = false;
++
++    /* VFIO-AP is restricted to a single mediated device only */
++    for (i = 0; i < def->nhostdevs; i++) {
++        virDomainHostdevDefPtr hostdev = def->hostdevs[i];
++
++        if (virHostdevIsMdevDevice(hostdev) &&
++            hostdev->source.subsys.u.mdev.model == VIR_MDEV_MODEL_TYPE_VFIO_AP) {
++            if (vfioap_found) {
++                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                               _("Only one hostdev of model vfio-ap is "
++                                 "supported"));
++                return -1;
++            }
++            vfioap_found = true;
++        }
++    }
++
++    return 0;
++}
++
++
+ static int
+ qemuDomainMdevDefValidate(const virDomainHostdevSubsysMediatedDev *mdevsrc,
+                           const virDomainDef *def,
+@@ -4495,7 +4521,7 @@ qemuDomainMdevDefValidate(const virDomainHostdevSubsysMediatedDev *mdevsrc,
+     case VIR_MDEV_MODEL_TYPE_VFIO_PCI:
+         return qemuDomainMdevDefVFIOPCIValidate(mdevsrc, def, qemuCaps);
+     case VIR_MDEV_MODEL_TYPE_VFIO_AP:
+-        break;
++        return qemuDomainMdevDefVFIOAPValidate(def);
+     case VIR_MDEV_MODEL_TYPE_VFIO_CCW:
+         break;
+     case VIR_MDEV_MODEL_TYPE_LAST:
+-- 
+2.19.2
+
diff --git a/SOURCES/libvirt-conf-Move-hugepage-XML-validation-check-out-of-qemu_command.patch b/SOURCES/libvirt-conf-Move-hugepage-XML-validation-check-out-of-qemu_command.patch
new file mode 100644
index 0000000..6788a1e
--- /dev/null
+++ b/SOURCES/libvirt-conf-Move-hugepage-XML-validation-check-out-of-qemu_command.patch
@@ -0,0 +1,247 @@
+From d1a499f071b2a223641d2e4f0783eda1ad67d1ae Mon Sep 17 00:00:00 2001
+Message-Id: <d1a499f071b2a223641d2e4f0783eda1ad67d1ae@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:52 +0200
+Subject: [PATCH] conf: Move hugepage XML validation check out of qemu_command
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We can safely validate the hugepage nodeset attribute at a define time.
+This validation is not done for already existing domains when the daemon
+is restarted.
+
+All the changes to the tests are necessary because we move the error
+from domain start into XML parse.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 5c93dfb46d9dff623707994f115b6bd7ca4f0682)
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.c                        | 32 +++++++++++++++++
+ src/qemu/qemu_command.c                       | 34 -------------------
+ .../seclabel-dynamic-none-relabel.xml         |  2 +-
+ tests/qemuxml2argvtest.c                      | 18 +++++-----
+ .../hugepages-default-1G-nodeset-2M.xml       |  1 -
+ .../qemuxml2xmloutdata/hugepages-nodeset.xml  |  1 -
+ .../hugepages-numa-nodeset-nonexist.xml       |  1 -
+ .../seclabel-dynamic-none-relabel.xml         |  2 +-
+ tests/qemuxml2xmltest.c                       |  3 --
+ 9 files changed, 43 insertions(+), 51 deletions(-)
+ delete mode 120000 tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml
+ delete mode 120000 tests/qemuxml2xmloutdata/hugepages-nodeset.xml
+ delete mode 120000 tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index a05aad056d..280bbdf35c 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -6142,6 +6142,35 @@ virDomainDefLifecycleActionValidate(const virDomainDef *def)
+ }
+ 
+ 
++static int
++virDomainDefMemtuneValidate(const virDomainDef *def)
++{
++    const virDomainMemtune *mem = &(def->mem);
++    size_t i;
++    ssize_t pos = virDomainNumaGetNodeCount(def->numa) - 1;
++
++    for (i = 0; i < mem->nhugepages; i++) {
++        ssize_t nextBit;
++
++        if (!mem->hugepages[i].nodemask) {
++            /* This is the master hugepage to use. Skip it as it has no
++             * nodemask anyway. */
++            continue;
++        }
++
++        nextBit = virBitmapNextSetBit(mem->hugepages[i].nodemask, pos);
++        if (nextBit >= 0) {
++            virReportError(VIR_ERR_XML_DETAIL,
++                           _("hugepages: node %zd not found"),
++                           nextBit);
++            return -1;
++        }
++    }
++
++    return 0;
++}
++
++
+ static int
+ virDomainDefValidateInternal(const virDomainDef *def)
+ {
+@@ -6177,6 +6206,9 @@ virDomainDefValidateInternal(const virDomainDef *def)
+     if (virDomainDefLifecycleActionValidate(def) < 0)
+         return -1;
+ 
++    if (virDomainDefMemtuneValidate(def) < 0)
++        return -1;
++
+     return 0;
+ }
+ 
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 954265feb0..f2b64ed720 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -7482,16 +7482,6 @@ qemuBuildMemPathStr(virQEMUDriverConfigPtr cfg,
+     if (!def->mem.nhugepages)
+         return 0;
+ 
+-    if (def->mem.hugepages[0].nodemask) {
+-        ssize_t next_bit = virBitmapNextSetBit(def->mem.hugepages[0].nodemask, -1);
+-        if (next_bit >= 0) {
+-            virReportError(VIR_ERR_XML_DETAIL,
+-                           _("hugepages: node %zd not found"),
+-                           next_bit);
+-            return -1;
+-        }
+-    }
+-
+     /* There is one special case: if user specified "huge"
+      * pages of regular system pages size.
+      * And there is nothing to do in this case.
+@@ -7624,30 +7614,6 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
+     if (!virDomainNumatuneNodesetIsAvailable(def->numa, priv->autoNodeset))
+         goto cleanup;
+ 
+-    for (i = 0; i < def->mem.nhugepages; i++) {
+-        ssize_t next_bit, pos = 0;
+-
+-        if (!def->mem.hugepages[i].nodemask) {
+-            /* This is the master hugepage to use. Skip it as it has no
+-             * nodemask anyway. */
+-            continue;
+-        }
+-
+-        if (ncells) {
+-            /* Fortunately, we allow only guest NUMA nodes to be continuous
+-             * starting from zero. */
+-            pos = ncells - 1;
+-        }
+-
+-        next_bit = virBitmapNextSetBit(def->mem.hugepages[i].nodemask, pos);
+-        if (next_bit >= 0) {
+-            virReportError(VIR_ERR_XML_DETAIL,
+-                           _("hugepages: node %zd not found"),
+-                           next_bit);
+-            goto cleanup;
+-        }
+-    }
+-
+     if (VIR_ALLOC_N(nodeBackends, ncells) < 0)
+         goto cleanup;
+ 
+diff --git a/tests/qemuxml2argvdata/seclabel-dynamic-none-relabel.xml b/tests/qemuxml2argvdata/seclabel-dynamic-none-relabel.xml
+index 47f253b5f7..e954250009 100644
+--- a/tests/qemuxml2argvdata/seclabel-dynamic-none-relabel.xml
++++ b/tests/qemuxml2argvdata/seclabel-dynamic-none-relabel.xml
+@@ -5,7 +5,7 @@
+   <currentMemory unit='KiB'>262144</currentMemory>
+   <memoryBacking>
+     <hugepages>
+-      <page size='2048' unit='KiB' nodeset='0'/>
++      <page size='2048' unit='KiB'/>
+     </hugepages>
+   </memoryBacking>
+   <vcpu placement='static'>4</vcpu>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index bd5fdf9412..f82bca2637 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -959,12 +959,12 @@ mymain(void)
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
+-    DO_TEST("hugepages-default-1G-nodeset-2M", NONE);
+-    DO_TEST_FAILURE("hugepages-nodeset", NONE);
+-    DO_TEST_FAILURE("hugepages-nodeset-nonexist",
+-                    QEMU_CAPS_DEVICE_PC_DIMM,
+-                    QEMU_CAPS_OBJECT_MEMORY_FILE,
+-                    QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
++    DO_TEST_PARSE_ERROR("hugepages-default-1G-nodeset-2M", NONE);
++    DO_TEST_PARSE_ERROR("hugepages-nodeset", NONE);
++    DO_TEST_PARSE_ERROR("hugepages-nodeset-nonexist",
++                        QEMU_CAPS_DEVICE_PC_DIMM,
++                        QEMU_CAPS_OBJECT_MEMORY_FILE,
++                        QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+     DO_TEST("hugepages-numa-default",
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-numa-default-2M",
+@@ -979,9 +979,9 @@ mymain(void)
+     DO_TEST("hugepages-numa-nodeset-part",
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+-    DO_TEST_FAILURE("hugepages-numa-nodeset-nonexist",
+-                    QEMU_CAPS_OBJECT_MEMORY_RAM,
+-                    QEMU_CAPS_OBJECT_MEMORY_FILE);
++    DO_TEST_PARSE_ERROR("hugepages-numa-nodeset-nonexist",
++                        QEMU_CAPS_OBJECT_MEMORY_RAM,
++                        QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-shared",
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+diff --git a/tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml b/tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml
+deleted file mode 120000
+index 3d8eb7616e..0000000000
+--- a/tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml
++++ /dev/null
+@@ -1 +0,0 @@
+-../qemuxml2argvdata/hugepages-default-1G-nodeset-2M.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmloutdata/hugepages-nodeset.xml b/tests/qemuxml2xmloutdata/hugepages-nodeset.xml
+deleted file mode 120000
+index b55838b780..0000000000
+--- a/tests/qemuxml2xmloutdata/hugepages-nodeset.xml
++++ /dev/null
+@@ -1 +0,0 @@
+-../qemuxml2argvdata/hugepages-nodeset.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml b/tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml
+deleted file mode 120000
+index d490edca69..0000000000
+--- a/tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml
++++ /dev/null
+@@ -1 +0,0 @@
+-../qemuxml2argvdata/hugepages-numa-nodeset-nonexist.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmloutdata/seclabel-dynamic-none-relabel.xml b/tests/qemuxml2xmloutdata/seclabel-dynamic-none-relabel.xml
+index 050967b4ee..bfa66b8deb 100644
+--- a/tests/qemuxml2xmloutdata/seclabel-dynamic-none-relabel.xml
++++ b/tests/qemuxml2xmloutdata/seclabel-dynamic-none-relabel.xml
+@@ -5,7 +5,7 @@
+   <currentMemory unit='KiB'>262144</currentMemory>
+   <memoryBacking>
+     <hugepages>
+-      <page size='2048' unit='KiB' nodeset='0'/>
++      <page size='2048' unit='KiB'/>
+     </hugepages>
+   </memoryBacking>
+   <vcpu placement='static'>4</vcpu>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index acbe2f7133..aa543e9e51 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -336,13 +336,10 @@ mymain(void)
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
+-    DO_TEST("hugepages-default-1G-nodeset-2M", NONE);
+-    DO_TEST("hugepages-nodeset", NONE);
+     DO_TEST("hugepages-numa-default-2M", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-numa-nodeset", NONE);
+     DO_TEST("hugepages-numa-nodeset-part", NONE);
+-    DO_TEST("hugepages-numa-nodeset-nonexist", NONE);
+     DO_TEST("hugepages-shared", NONE);
+     DO_TEST("hugepages-memaccess", NONE);
+     DO_TEST("hugepages-memaccess2", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Move-hugepages-validation-out-of-XML-parser.patch b/SOURCES/libvirt-conf-Move-hugepages-validation-out-of-XML-parser.patch
new file mode 100644
index 0000000..8e1c4e2
--- /dev/null
+++ b/SOURCES/libvirt-conf-Move-hugepages-validation-out-of-XML-parser.patch
@@ -0,0 +1,126 @@
+From a4ddc9b4213809cbab4abce609441975ae433dae Mon Sep 17 00:00:00 2001
+Message-Id: <a4ddc9b4213809cbab4abce609441975ae433dae@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:53 +0200
+Subject: [PATCH] conf: Move hugepages validation out of XML parser
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 82327038390bfae117dc6e1d9062e38901cd4c97)
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.c | 75 ++++++++++++++++++++++--------------------
+ 1 file changed, 40 insertions(+), 35 deletions(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 280bbdf35c..98e833c5bb 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -6149,9 +6149,49 @@ virDomainDefMemtuneValidate(const virDomainDef *def)
+     size_t i;
+     ssize_t pos = virDomainNumaGetNodeCount(def->numa) - 1;
+ 
++    if (mem->nhugepages == 0)
++        return 0;
++
++    if (mem->allocation == VIR_DOMAIN_MEMORY_ALLOCATION_ONDEMAND) {
++        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                       _("hugepages are not allowed with memory "
++                         "allocation ondemand"));
++        return -1;
++    }
++
++    if (mem->source == VIR_DOMAIN_MEMORY_SOURCE_ANONYMOUS) {
++        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                       _("hugepages are not allowed with anonymous "
++                         "memory source"));
++        return -1;
++    }
++
+     for (i = 0; i < mem->nhugepages; i++) {
++        size_t j;
+         ssize_t nextBit;
+ 
++        for (j = 0; j < i; j++) {
++            if (mem->hugepages[i].nodemask &&
++                mem->hugepages[j].nodemask &&
++                virBitmapOverlaps(mem->hugepages[i].nodemask,
++                                  mem->hugepages[j].nodemask)) {
++                virReportError(VIR_ERR_XML_DETAIL,
++                               _("nodeset attribute of hugepages "
++                                 "of sizes %llu and %llu intersect"),
++                               mem->hugepages[i].size,
++                               mem->hugepages[j].size);
++                return -1;
++            } else if (!mem->hugepages[i].nodemask &&
++                       !mem->hugepages[j].nodemask) {
++                virReportError(VIR_ERR_XML_DETAIL,
++                               _("two master hugepages detected: "
++                                 "%llu and %llu"),
++                               mem->hugepages[i].size,
++                               mem->hugepages[j].size);
++                return -1;
++            }
++        }
++
+         if (!mem->hugepages[i].nodemask) {
+             /* This is the master hugepage to use. Skip it as it has no
+              * nodemask anyway. */
+@@ -19414,19 +19454,6 @@ virDomainDefParseXML(xmlDocPtr xml,
+ 
+     if (virXPathNode("./memoryBacking/hugepages", ctxt)) {
+         /* hugepages will be used */
+-
+-        if (def->mem.allocation == VIR_DOMAIN_MEMORY_ALLOCATION_ONDEMAND) {
+-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+-                           _("hugepages are not allowed with memory allocation ondemand"));
+-            goto error;
+-        }
+-
+-        if (def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_ANONYMOUS) {
+-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+-                           _("hugepages are not allowed with anonymous memory source"));
+-            goto error;
+-        }
+-
+         if ((n = virXPathNodeSet("./memoryBacking/hugepages/page", ctxt, &nodes)) < 0) {
+             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                            _("cannot extract hugepages nodes"));
+@@ -19442,28 +19469,6 @@ virDomainDefParseXML(xmlDocPtr xml,
+                                                &def->mem.hugepages[i]) < 0)
+                     goto error;
+                 def->mem.nhugepages++;
+-
+-                for (j = 0; j < i; j++) {
+-                    if (def->mem.hugepages[i].nodemask &&
+-                        def->mem.hugepages[j].nodemask &&
+-                        virBitmapOverlaps(def->mem.hugepages[i].nodemask,
+-                                          def->mem.hugepages[j].nodemask)) {
+-                        virReportError(VIR_ERR_XML_DETAIL,
+-                                       _("nodeset attribute of hugepages "
+-                                         "of sizes %llu and %llu intersect"),
+-                                       def->mem.hugepages[i].size,
+-                                       def->mem.hugepages[j].size);
+-                        goto error;
+-                    } else if (!def->mem.hugepages[i].nodemask &&
+-                               !def->mem.hugepages[j].nodemask) {
+-                        virReportError(VIR_ERR_XML_DETAIL,
+-                                       _("two master hugepages detected: "
+-                                         "%llu and %llu"),
+-                                       def->mem.hugepages[i].size,
+-                                       def->mem.hugepages[j].size);
+-                        goto error;
+-                    }
+-                }
+             }
+ 
+             VIR_FREE(nodes);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Parse-and-format-nested-hv-feature.patch b/SOURCES/libvirt-conf-Parse-and-format-nested-hv-feature.patch
new file mode 100644
index 0000000..ea80aab
--- /dev/null
+++ b/SOURCES/libvirt-conf-Parse-and-format-nested-hv-feature.patch
@@ -0,0 +1,152 @@
+From 742667e7f0a55f3a8042840e2995982a003dc2fc Mon Sep 17 00:00:00 2001
+Message-Id: <742667e7f0a55f3a8042840e2995982a003dc2fc@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Tue, 4 Dec 2018 16:46:19 +0100
+Subject: [PATCH] conf: Parse and format nested-hv feature
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit bfa2bd7e38f2777260b63200ef12804e13a7a5c2)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1647822
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/formatdomain.html.in                     | 12 ++++++++++++
+ docs/schemas/domaincommon.rng                 |  5 +++++
+ src/conf/domain_conf.c                        |  4 ++++
+ src/conf/domain_conf.h                        |  1 +
+ src/qemu/qemu_domain.c                        |  1 +
+ tests/qemuxml2argvdata/pseries-features.xml   |  1 +
+ tests/qemuxml2xmloutdata/pseries-features.xml |  1 +
+ 7 files changed, 25 insertions(+)
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index 54eb298414..02d0ac4241 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -2191,6 +2191,18 @@
+           defined, the hypervisor default will be used.
+           <span class="since">Since 4.6.0</span> (QEMU/KVM only)
+       </dd>
++      <dt><code>nested-hv</code></dt>
++      <dd>Configure nested HV availability for pSeries guests. This needs to
++          be enabled from the host (L0) in order to be effective; having HV
++          support in the (L1) guest is very desiderable if it's planned to
++          run nested (L2) guests inside it, because it will result in those
++          nested guests having much better performance than they would when
++          using KVM PR or TCG.
++          Possible values for the <code>state</code> attribute are
++          <code>on</code> and <code>off</code>. If the attribute is not
++          defined, the hypervisor default will be used.
++          <span class="since">Since 4.10.0</span> (QEMU/KVM only)
++      </dd>
+     </dl>
+ 
+     <h3><a id="elementsTime">Time keeping</a></h3>
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index e4ce7804b9..70a7767d9c 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -4925,6 +4925,11 @@
+               <ref name="featurestate"/>
+             </element>
+           </optional>
++          <optional>
++            <element name="nested-hv">
++              <ref name="featurestate"/>
++            </element>
++          </optional>
+         </interleave>
+       </element>
+     </optional>
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index e013e9f0c5..660e1523fe 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -153,6 +153,7 @@ VIR_ENUM_IMPL(virDomainFeature, VIR_DOMAIN_FEATURE_LAST,
+               "hpt",
+               "vmcoreinfo",
+               "htm",
++              "nested-hv",
+ );
+ 
+ VIR_ENUM_IMPL(virDomainCapabilitiesPolicy, VIR_DOMAIN_CAPABILITIES_POLICY_LAST,
+@@ -19987,6 +19988,7 @@ virDomainDefParseXML(xmlDocPtr xml,
+             break;
+ 
+         case VIR_DOMAIN_FEATURE_HTM:
++        case VIR_DOMAIN_FEATURE_NESTED_HV:
+             if (!(tmp = virXMLPropString(nodes[i], "state"))) {
+                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                _("missing state attribute '%s' of feature '%s'"),
+@@ -22147,6 +22149,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src,
+         case VIR_DOMAIN_FEATURE_SMM:
+         case VIR_DOMAIN_FEATURE_VMCOREINFO:
+         case VIR_DOMAIN_FEATURE_HTM:
++        case VIR_DOMAIN_FEATURE_NESTED_HV:
+             if (src->features[i] != dst->features[i]) {
+                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                _("State of feature '%s' differs: "
+@@ -27823,6 +27826,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
+             case VIR_DOMAIN_FEATURE_PVSPINLOCK:
+             case VIR_DOMAIN_FEATURE_VMPORT:
+             case VIR_DOMAIN_FEATURE_HTM:
++            case VIR_DOMAIN_FEATURE_NESTED_HV:
+                 switch ((virTristateSwitch) def->features[i]) {
+                 case VIR_TRISTATE_SWITCH_LAST:
+                 case VIR_TRISTATE_SWITCH_ABSENT:
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index d32514e7e6..f05fca284f 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -1775,6 +1775,7 @@ typedef enum {
+     VIR_DOMAIN_FEATURE_HPT,
+     VIR_DOMAIN_FEATURE_VMCOREINFO,
+     VIR_DOMAIN_FEATURE_HTM,
++    VIR_DOMAIN_FEATURE_NESTED_HV,
+ 
+     VIR_DOMAIN_FEATURE_LAST
+ } virDomainFeature;
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 4fcca1e05a..0ddc6ef4a7 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -3819,6 +3819,7 @@ qemuDomainDefValidateFeatures(const virDomainDef *def,
+ 
+         case VIR_DOMAIN_FEATURE_HPT:
+         case VIR_DOMAIN_FEATURE_HTM:
++        case VIR_DOMAIN_FEATURE_NESTED_HV:
+             if (def->features[i] != VIR_TRISTATE_SWITCH_ABSENT &&
+                 !qemuDomainIsPSeries(def)) {
+                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+diff --git a/tests/qemuxml2argvdata/pseries-features.xml b/tests/qemuxml2argvdata/pseries-features.xml
+index 5c842fe87b..6f7d32b065 100644
+--- a/tests/qemuxml2argvdata/pseries-features.xml
++++ b/tests/qemuxml2argvdata/pseries-features.xml
+@@ -11,6 +11,7 @@
+       <maxpagesize unit='GiB'>1</maxpagesize>
+     </hpt>
+     <htm state='on'/>
++    <nested-hv state='off'/>
+   </features>
+   <devices>
+     <emulator>/usr/bin/qemu-system-ppc64</emulator>
+diff --git a/tests/qemuxml2xmloutdata/pseries-features.xml b/tests/qemuxml2xmloutdata/pseries-features.xml
+index 55a44c75a0..7e12bc9c03 100644
+--- a/tests/qemuxml2xmloutdata/pseries-features.xml
++++ b/tests/qemuxml2xmloutdata/pseries-features.xml
+@@ -13,6 +13,7 @@
+       <maxpagesize unit='KiB'>1048576</maxpagesize>
+     </hpt>
+     <htm state='on'/>
++    <nested-hv state='off'/>
+   </features>
+   <clock offset='utc'/>
+   <on_poweroff>destroy</on_poweroff>
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-conf-Parse-and-format-the-HTM-pSeries-feature.patch b/SOURCES/libvirt-conf-Parse-and-format-the-HTM-pSeries-feature.patch
new file mode 100644
index 0000000..51d16be
--- /dev/null
+++ b/SOURCES/libvirt-conf-Parse-and-format-the-HTM-pSeries-feature.patch
@@ -0,0 +1,194 @@
+From cb462f891f39ff47179e6fe65437450f9d8c7824 Mon Sep 17 00:00:00 2001
+Message-Id: <cb462f891f39ff47179e6fe65437450f9d8c7824@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Tue, 3 Jul 2018 15:25:16 +0200
+Subject: [PATCH] conf: Parse and format the HTM pSeries feature
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+
+(cherry picked from commit 9f3b9100f33036cb14296aa0a788788743b75a23)
+https: //bugzilla.redhat.com/show_bug.cgi?id=1525599
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Acked-by: David Gibson <dgibson@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ docs/formatdomain.html.in                     |  8 ++++++++
+ docs/schemas/domaincommon.rng                 |  5 +++++
+ src/conf/domain_conf.c                        | 19 +++++++++++++++++++
+ src/conf/domain_conf.h                        |  1 +
+ src/qemu/qemu_domain.c                        |  1 +
+ tests/qemuxml2argvdata/pseries-features.xml   |  1 +
+ tests/qemuxml2argvtest.c                      |  1 +
+ tests/qemuxml2xmloutdata/pseries-features.xml |  1 +
+ tests/qemuxml2xmltest.c                       |  1 +
+ 9 files changed, 38 insertions(+)
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index 0d68596991..a3afe137bf 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -1929,6 +1929,7 @@
+   &lt;smm state='on'&gt;
+     &lt;tseg unit='MiB'&gt;48&lt;/tseg&gt;
+   &lt;/smm&gt;
++  &lt;htm state='on'/&gt;
+ &lt;/features&gt;
+ ...</pre>
+ 
+@@ -2162,6 +2163,13 @@
+       <dd>Enable QEMU vmcoreinfo device to let the guest kernel save debug
+           details. <span class="since">Since 4.4.0</span> (QEMU only)
+       </dd>
++      <dt><code>htm</code></dt>
++      <dd>Configure HTM (Hardware Transational Memory) availability for
++          pSeries guests. Possible values for the <code>state</code> attribute
++          are <code>on</code> and <code>off</code>. If the attribute is not
++          defined, the hypervisor default will be used.
++          <span class="since">Since 4.6.0</span> (QEMU/KVM only)
++      </dd>
+     </dl>
+ 
+     <h3><a id="elementsTime">Time keeping</a></h3>
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index f46145cf9b..bd687ce9d3 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -4907,6 +4907,11 @@
+           <optional>
+             <ref name="vmcoreinfo"/>
+           </optional>
++          <optional>
++            <element name="htm">
++              <ref name="featurestate"/>
++            </element>
++          </optional>
+         </interleave>
+       </element>
+     </optional>
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index b8b53450fa..f4e59f6c91 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -152,6 +152,7 @@ VIR_ENUM_IMPL(virDomainFeature, VIR_DOMAIN_FEATURE_LAST,
+               "ioapic",
+               "hpt",
+               "vmcoreinfo",
++              "htm",
+ );
+ 
+ VIR_ENUM_IMPL(virDomainCapabilitiesPolicy, VIR_DOMAIN_CAPABILITIES_POLICY_LAST,
+@@ -19827,6 +19828,22 @@ virDomainDefParseXML(xmlDocPtr xml,
+             }
+             break;
+ 
++        case VIR_DOMAIN_FEATURE_HTM:
++            if (!(tmp = virXMLPropString(nodes[i], "state"))) {
++                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++                               _("missing state attribute '%s' of feature '%s'"),
++                               tmp, virDomainFeatureTypeToString(val));
++                goto error;
++            }
++            if ((def->features[val] = virTristateSwitchTypeFromString(tmp)) < 0) {
++                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++                               _("unknown state attribute '%s' of feature '%s'"),
++                               tmp, virDomainFeatureTypeToString(val));
++                goto error;
++            }
++            VIR_FREE(tmp);
++            break;
++
+         /* coverity[dead_error_begin] */
+         case VIR_DOMAIN_FEATURE_LAST:
+             break;
+@@ -21961,6 +21978,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src,
+         case VIR_DOMAIN_FEATURE_VMPORT:
+         case VIR_DOMAIN_FEATURE_SMM:
+         case VIR_DOMAIN_FEATURE_VMCOREINFO:
++        case VIR_DOMAIN_FEATURE_HTM:
+             if (src->features[i] != dst->features[i]) {
+                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                _("State of feature '%s' differs: "
+@@ -27626,6 +27644,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
+             case VIR_DOMAIN_FEATURE_PMU:
+             case VIR_DOMAIN_FEATURE_PVSPINLOCK:
+             case VIR_DOMAIN_FEATURE_VMPORT:
++            case VIR_DOMAIN_FEATURE_HTM:
+                 switch ((virTristateSwitch) def->features[i]) {
+                 case VIR_TRISTATE_SWITCH_LAST:
+                 case VIR_TRISTATE_SWITCH_ABSENT:
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index 71437dc485..41d27482fb 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -1771,6 +1771,7 @@ typedef enum {
+     VIR_DOMAIN_FEATURE_IOAPIC,
+     VIR_DOMAIN_FEATURE_HPT,
+     VIR_DOMAIN_FEATURE_VMCOREINFO,
++    VIR_DOMAIN_FEATURE_HTM,
+ 
+     VIR_DOMAIN_FEATURE_LAST
+ } virDomainFeature;
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 4c2a162b85..0eacad1e44 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -3865,6 +3865,7 @@ qemuDomainDefValidateFeatures(const virDomainDef *def,
+         case VIR_DOMAIN_FEATURE_PMU:
+         case VIR_DOMAIN_FEATURE_VMPORT:
+         case VIR_DOMAIN_FEATURE_VMCOREINFO:
++        case VIR_DOMAIN_FEATURE_HTM:
+         case VIR_DOMAIN_FEATURE_LAST:
+             break;
+         }
+diff --git a/tests/qemuxml2argvdata/pseries-features.xml b/tests/qemuxml2argvdata/pseries-features.xml
+index 30cee5b81c..5c842fe87b 100644
+--- a/tests/qemuxml2argvdata/pseries-features.xml
++++ b/tests/qemuxml2argvdata/pseries-features.xml
+@@ -10,6 +10,7 @@
+     <hpt resizing='required'>
+       <maxpagesize unit='GiB'>1</maxpagesize>
+     </hpt>
++    <htm state='on'/>
+   </features>
+   <devices>
+     <emulator>/usr/bin/qemu-system-ppc64</emulator>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index c279ac4975..d6911f9344 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -1850,6 +1850,7 @@ mymain(void)
+     DO_TEST("pseries-features",
+             QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
+             QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
++            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
+             QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
+     DO_TEST_FAILURE("pseries-features",
+                     QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
+diff --git a/tests/qemuxml2xmloutdata/pseries-features.xml b/tests/qemuxml2xmloutdata/pseries-features.xml
+index f36705f011..55a44c75a0 100644
+--- a/tests/qemuxml2xmloutdata/pseries-features.xml
++++ b/tests/qemuxml2xmloutdata/pseries-features.xml
+@@ -12,6 +12,7 @@
+     <hpt resizing='required'>
+       <maxpagesize unit='KiB'>1048576</maxpagesize>
+     </hpt>
++    <htm state='on'/>
+   </features>
+   <clock offset='utc'/>
+   <on_poweroff>destroy</on_poweroff>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index eac6d5b073..bbb995656e 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -620,6 +620,7 @@ mymain(void)
+     DO_TEST("pseries-features",
+             QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
+             QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
++            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
+             QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
+ 
+     DO_TEST("pseries-serial-native",
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Parse-guestfwd-channel-device-info-again.patch b/SOURCES/libvirt-conf-Parse-guestfwd-channel-device-info-again.patch
new file mode 100644
index 0000000..fa9640d
--- /dev/null
+++ b/SOURCES/libvirt-conf-Parse-guestfwd-channel-device-info-again.patch
@@ -0,0 +1,48 @@
+From ac3ea7982236832f5f2ae86b631aface267d035c Mon Sep 17 00:00:00 2001
+Message-Id: <ac3ea7982236832f5f2ae86b631aface267d035c@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Tue, 21 Aug 2018 14:23:40 +0200
+Subject: [PATCH] conf: Parse guestfwd channel device info again
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1610072
+
+Due to historical reasons we were not parsing device info on
+guestfwd channel. Sure, it doesn't make much sense to parse
+<address/> but it surely makes sense to parse its alias (which
+might be an user alias).
+
+This reverts commit 47a3dd46ead20e6fdc30bcdc1b8e707e250d33da
+which fixed https://bugzilla.redhat.com/show_bug.cgi?id=1172526.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit cab1843914d9ce5d1ca28477d2b48e5304e9e6f2)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/conf/domain_conf.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 8a43e607e9..51a79ad8b1 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -12760,14 +12760,8 @@ virDomainChrDefParseXML(virDomainXMLOptionPtr xmlopt,
+         }
+     }
+ 
+-    if (def->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL &&
+-        def->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD) {
+-        VIR_DEBUG("Ignoring device address for gustfwd channel");
+-    } else if (virDomainDeviceInfoParseXML(xmlopt, node,
+-                                           &def->info, flags) < 0) {
++    if (virDomainDeviceInfoParseXML(xmlopt, node, &def->info, flags) < 0)
+         goto error;
+-    }
+-
+ 
+     if (def->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
+         def->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB &&
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-Replace-error-with-cleanup-in-virDomainHostdevDefParseXMLSubsys.patch b/SOURCES/libvirt-conf-Replace-error-with-cleanup-in-virDomainHostdevDefParseXMLSubsys.patch
new file mode 100644
index 0000000..8128784
--- /dev/null
+++ b/SOURCES/libvirt-conf-Replace-error-with-cleanup-in-virDomainHostdevDefParseXMLSubsys.patch
@@ -0,0 +1,175 @@
+From fd6fae19231031f3feb83c854efdf2f1abfa7847 Mon Sep 17 00:00:00 2001
+Message-Id: <fd6fae19231031f3feb83c854efdf2f1abfa7847@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:04:01 +0200
+Subject: [PATCH] conf: Replace 'error' with 'cleanup' in
+ virDomainHostdevDefParseXMLSubsys
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The exit path is the same for both success and failure, so the label
+should be called cleanup.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit f1f6f4858260a77416ed5e0c86c4e0614aaf0a5e)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.c | 38 +++++++++++++++++++-------------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 08654ab41d..72086f9e86 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -7690,18 +7690,18 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
+             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                            _("unknown host device source address type '%s'"),
+                            type);
+-            goto error;
++            goto cleanup;
+         }
+     } else {
+         virReportError(VIR_ERR_XML_ERROR,
+                        "%s", _("missing source address type"));
+-        goto error;
++        goto cleanup;
+     }
+ 
+     if (!(sourcenode = virXPathNode("./source", ctxt))) {
+         virReportError(VIR_ERR_XML_ERROR, "%s",
+                        _("Missing <source> element in hostdev device"));
+-        goto error;
++        goto cleanup;
+     }
+ 
+     if (def->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB &&
+@@ -7709,20 +7709,20 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
+         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                        _("Setting startupPolicy is only allowed for USB"
+                          " devices"));
+-        goto error;
++        goto cleanup;
+     }
+ 
+     if (sgio) {
+         if (def->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI) {
+             virReportError(VIR_ERR_XML_ERROR, "%s",
+                            _("sgio is only supported for scsi host device"));
+-            goto error;
++            goto cleanup;
+         }
+ 
+         if ((scsisrc->sgio = virDomainDeviceSGIOTypeFromString(sgio)) <= 0) {
+             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                            _("unknown sgio mode '%s'"), sgio);
+-            goto error;
++            goto cleanup;
+         }
+     }
+ 
+@@ -7730,14 +7730,14 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
+         if (def->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI) {
+             virReportError(VIR_ERR_XML_ERROR, "%s",
+                            _("rawio is only supported for scsi host device"));
+-            goto error;
++            goto cleanup;
+         }
+ 
+         if ((scsisrc->rawio = virTristateBoolTypeFromString(rawio)) <= 0) {
+             virReportError(VIR_ERR_XML_ERROR,
+                            _("unknown hostdev rawio setting '%s'"),
+                            rawio);
+-            goto error;
++            goto cleanup;
+         }
+     }
+ 
+@@ -7746,28 +7746,28 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
+             virReportError(VIR_ERR_XML_ERROR, "%s",
+                            _("'model' attribute in <hostdev> is only supported "
+                              "when type='mdev'"));
+-            goto error;
++            goto cleanup;
+         }
+     } else {
+         if (!model) {
+             virReportError(VIR_ERR_XML_ERROR, "%s",
+                            _("Missing 'model' attribute in mediated device's "
+                              "<hostdev> element"));
+-            goto error;
++            goto cleanup;
+         }
+ 
+         if ((mdevsrc->model = virMediatedDeviceModelTypeFromString(model)) < 0) {
+             virReportError(VIR_ERR_XML_ERROR,
+                            _("unknown hostdev model '%s'"),
+                            model);
+-            goto error;
++            goto cleanup;
+         }
+     }
+ 
+     switch (def->source.subsys.type) {
+     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
+         if (virDomainHostdevSubsysPCIDefParseXML(sourcenode, def, flags) < 0)
+-            goto error;
++            goto cleanup;
+ 
+         backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT;
+         if ((backendStr = virXPathString("string(./driver/@name)", ctxt)) &&
+@@ -7776,7 +7776,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
+             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                            _("Unknown PCI device <driver name='%s'/> "
+                              "has been specified"), backendStr);
+-            goto error;
++            goto cleanup;
+         }
+         pcisrc->backend = backend;
+ 
+@@ -7784,32 +7784,32 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
+ 
+     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
+         if (virDomainHostdevSubsysUSBDefParseXML(sourcenode, def) < 0)
+-            goto error;
++            goto cleanup;
+         break;
+ 
+     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
+         if (virDomainHostdevSubsysSCSIDefParseXML(sourcenode, scsisrc, ctxt) < 0)
+-            goto error;
++            goto cleanup;
+         break;
+ 
+     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
+         if (virDomainHostdevSubsysSCSIVHostDefParseXML(sourcenode, def) < 0)
+-            goto error;
++            goto cleanup;
+         break;
+     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
+         if (virDomainHostdevSubsysMediatedDevDefParseXML(def, ctxt) < 0)
+-            goto error;
++            goto cleanup;
+         break;
+ 
+     default:
+         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                        _("address type='%s' not supported in hostdev interfaces"),
+                        virDomainHostdevSubsysTypeToString(def->source.subsys.type));
+-        goto error;
++        goto cleanup;
+     }
+ 
+     ret = 0;
+- error:
++ cleanup:
+     VIR_FREE(managed);
+     VIR_FREE(sgio);
+     VIR_FREE(rawio);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-conf-correct-false-boot-order-error-during-domain-parse.patch b/SOURCES/libvirt-conf-correct-false-boot-order-error-during-domain-parse.patch
new file mode 100644
index 0000000..a255b84
--- /dev/null
+++ b/SOURCES/libvirt-conf-correct-false-boot-order-error-during-domain-parse.patch
@@ -0,0 +1,214 @@
+From b56deb73400af9518bdc86802b8ac8da0670d806 Mon Sep 17 00:00:00 2001
+Message-Id: <b56deb73400af9518bdc86802b8ac8da0670d806@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Thu, 10 Jan 2019 09:44:45 -0500
+Subject: [PATCH] conf: correct false boot order error during domain parse
+
+virDomainDefCollectBootOrder() is called for every item on the list
+for each type of device. One of the checks it makes is to gather the
+order attributes from the <boot> element of all devices, and assure
+that no two devices have been given the same order.
+
+Since (internally to libvirt, *not* in the domain XML) an <interface
+type='hostdev'> is on both the list of hostdev devices and the list of
+network devices, it will be counted twice, and the code that checks
+for multiple devices with the same boot order will give a false
+positive.
+
+To remedy this, we make sure to return early for hostdev devices that
+have a parent.type != NONE.
+
+This was introduced in commit 5b75a4, which was first in libvirt-4.4.0.
+
+Resolves: https://bugzilla.redhat.com/1630393 (RHEL8)
+Resolves: https://bugzilla.redhat.com/1601318 (RHEL7)
+
+Change from upstream: upstream has eliminated QEMU_CAPS_BOOTINDEX and
+QEMU_CAPS_PCI_BOOTINDEX so they're no longer necessary in test cases.
+
+Signed-off-by: Laine Stump <laine@laine.org>
+(cherry picked from commit 7ea7342996d74591e00bcbf14b1eb3995f77a199)
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/conf/domain_conf.c                        |  8 ++++
+ .../net-hostdev-bootorder.args                | 27 ++++++++++++
+ .../net-hostdev-bootorder.xml                 | 36 ++++++++++++++++
+ tests/qemuxml2argvtest.c                      |  3 ++
+ .../net-hostdev-bootorder.xml                 | 42 +++++++++++++++++++
+ tests/qemuxml2xmltest.c                       |  1 +
+ 6 files changed, 117 insertions(+)
+ create mode 100644 tests/qemuxml2argvdata/net-hostdev-bootorder.args
+ create mode 100644 tests/qemuxml2argvdata/net-hostdev-bootorder.xml
+ create mode 100644 tests/qemuxml2xmloutdata/net-hostdev-bootorder.xml
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 660e1523fe..d431441f62 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -5076,6 +5076,14 @@ virDomainDefCollectBootOrder(virDomainDefPtr def ATTRIBUTE_UNUSED,
+     if (info->bootIndex == 0)
+         return 0;
+ 
++    if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV &&
++        dev->data.hostdev->parent.type != VIR_DOMAIN_DEVICE_NONE) {
++        /* This hostdev is a child of a higher level device
++         * (e.g. interface), and thus already being counted on the
++         * list for the other device type.
++         */
++        return 0;
++    }
+     if (virAsprintf(&order, "%u", info->bootIndex) < 0)
+         goto cleanup;
+ 
+diff --git a/tests/qemuxml2argvdata/net-hostdev-bootorder.args b/tests/qemuxml2argvdata/net-hostdev-bootorder.args
+new file mode 100644
+index 0000000000..e632d9b195
+--- /dev/null
++++ b/tests/qemuxml2argvdata/net-hostdev-bootorder.args
+@@ -0,0 +1,27 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name QEMUGuest1 \
++-S \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-display none \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
++server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-usb \
++-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
++-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,\
++bootindex=2 \
++-device pci-assign,host=03:07.1,id=hostdev0,bootindex=1,bus=pci.0,addr=0x3
+diff --git a/tests/qemuxml2argvdata/net-hostdev-bootorder.xml b/tests/qemuxml2argvdata/net-hostdev-bootorder.xml
+new file mode 100644
+index 0000000000..cd9f32b2f3
+--- /dev/null
++++ b/tests/qemuxml2argvdata/net-hostdev-bootorder.xml
+@@ -0,0 +1,36 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++      <boot order='2'/>
++    </disk>
++    <controller type='usb' index='0'/>
++    <controller type='ide' index='0'/>
++    <controller type='pci' index='0' model='pci-root'/>
++    <interface type='hostdev' managed='yes'>
++      <mac address='00:11:22:33:44:55'/>
++      <source>
++        <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
++      </source>
++      <boot order='1'/>
++    </interface>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index bd4aa1266d..690a39054e 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -1324,6 +1324,9 @@ mymain(void)
+     DO_TEST("net-mcast", NONE);
+     DO_TEST("net-udp", NONE);
+     DO_TEST("net-hostdev", NONE);
++    DO_TEST("net-hostdev-bootorder",
++            QEMU_CAPS_BOOTINDEX,
++            QEMU_CAPS_PCI_BOOTINDEX);
+     DO_TEST("net-hostdev-multidomain", NONE);
+     DO_TEST("net-hostdev-vfio",
+             QEMU_CAPS_DEVICE_VFIO_PCI);
+diff --git a/tests/qemuxml2xmloutdata/net-hostdev-bootorder.xml b/tests/qemuxml2xmloutdata/net-hostdev-bootorder.xml
+new file mode 100644
+index 0000000000..d9ecf40cf0
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/net-hostdev-bootorder.xml
+@@ -0,0 +1,42 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <boot order='2'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='ide' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <interface type='hostdev' managed='yes'>
++      <mac address='00:11:22:33:44:55'/>
++      <source>
++        <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
++      </source>
++      <boot order='1'/>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
++    </interface>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index db088fff6b..dbac863239 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -454,6 +454,7 @@ mymain(void)
+     DO_TEST("net-virtio-network-portgroup", NONE);
+     DO_TEST("net-virtio-rxtxqueuesize", NONE);
+     DO_TEST("net-hostdev", NONE);
++    DO_TEST("net-hostdev-bootorder", NONE);
+     DO_TEST("net-hostdev-vfio", NONE);
+     DO_TEST("net-midonet", NONE);
+     DO_TEST("net-openvswitch", NONE);
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-conf-qemu-add-support-for-Hyper-V-PV-TLB-flush.patch b/SOURCES/libvirt-conf-qemu-add-support-for-Hyper-V-PV-TLB-flush.patch
new file mode 100644
index 0000000..6ad8b27
--- /dev/null
+++ b/SOURCES/libvirt-conf-qemu-add-support-for-Hyper-V-PV-TLB-flush.patch
@@ -0,0 +1,262 @@
+From efc0312e1edb3d8196806606fbb639bbbd0bd6d4 Mon Sep 17 00:00:00 2001
+Message-Id: <efc0312e1edb3d8196806606fbb639bbbd0bd6d4@dist-git>
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Thu, 9 Aug 2018 15:14:21 +0200
+Subject: [PATCH] conf: qemu: add support for Hyper-V PV TLB flush
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Qemu-3.0 supports Hyper-V-style PV TLB flush, Windows guests can benefit
+from this feature as KVM knows which vCPUs are not currently scheduled (and
+thus don't require any immediate action).
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit f4c39db7366376bd95e1751b0e3ced9c73c14f5b)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1589702
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/formatdomain.html.in               | 7 +++++++
+ docs/schemas/domaincommon.rng           | 5 +++++
+ src/conf/domain_conf.c                  | 6 +++++-
+ src/conf/domain_conf.h                  | 1 +
+ src/cpu/cpu_x86.c                       | 3 +++
+ src/cpu/cpu_x86_data.h                  | 1 +
+ src/qemu/qemu_command.c                 | 1 +
+ src/qemu/qemu_parse_command.c           | 1 +
+ src/qemu/qemu_process.c                 | 1 +
+ tests/qemuxml2argvdata/hyperv-off.xml   | 1 +
+ tests/qemuxml2argvdata/hyperv.args      | 2 +-
+ tests/qemuxml2argvdata/hyperv.xml       | 1 +
+ tests/qemuxml2xmloutdata/hyperv-off.xml | 1 +
+ tests/qemuxml2xmloutdata/hyperv.xml     | 1 +
+ 14 files changed, 30 insertions(+), 2 deletions(-)
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index 43a1067501..c019b26644 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -1917,6 +1917,7 @@
+     &lt;vendor_id state='on' value='KVM Hv'/&gt;
+     &lt;frequencies state='on'/&gt;
+     &lt;reenlightenment state='on'/&gt;
++    &lt;tlbflush state='on'/&gt;
+   &lt;/hyperv&gt;
+   &lt;kvm&gt;
+     &lt;hidden state='on'/&gt;
+@@ -2051,6 +2052,12 @@
+           <td> on, off</td>
+           <td><span class="since">4.7.0 (QEMU 3.0)</span></td>
+         </tr>
++        <tr>
++          <td>tlbflush</td>
++          <td>Enable PV TLB flush support</td>
++          <td> on, off</td>
++          <td><span class="since">4.7.0 (QEMU 3.0)</span></td>
++        </tr>
+       </table>
+       </dd>
+       <dt><code>pvspinlock</code></dt>
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index ceee7a8efe..1c6f2a295d 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -5723,6 +5723,11 @@
+             <ref name="featurestate"/>
+           </element>
+         </optional>
++        <optional>
++          <element name="tlbflush">
++            <ref name="featurestate"/>
++          </element>
++        </optional>
+       </interleave>
+     </element>
+   </define>
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 18b4d03a61..e013e9f0c5 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -171,7 +171,8 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST,
+               "reset",
+               "vendor_id",
+               "frequencies",
+-              "reenlightenment")
++              "reenlightenment",
++              "tlbflush")
+ 
+ VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST,
+               "hidden")
+@@ -20055,6 +20056,7 @@ virDomainDefParseXML(xmlDocPtr xml,
+             case VIR_DOMAIN_HYPERV_RESET:
+             case VIR_DOMAIN_HYPERV_FREQUENCIES:
+             case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
++            case VIR_DOMAIN_HYPERV_TLBFLUSH:
+                 break;
+ 
+             case VIR_DOMAIN_HYPERV_SPINLOCKS:
+@@ -22248,6 +22250,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src,
+             case VIR_DOMAIN_HYPERV_RESET:
+             case VIR_DOMAIN_HYPERV_FREQUENCIES:
+             case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
++            case VIR_DOMAIN_HYPERV_TLBFLUSH:
+                 if (src->hyperv_features[i] != dst->hyperv_features[i]) {
+                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                    _("State of HyperV enlightenment "
+@@ -27898,6 +27901,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
+                     case VIR_DOMAIN_HYPERV_RESET:
+                     case VIR_DOMAIN_HYPERV_FREQUENCIES:
+                     case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
++                    case VIR_DOMAIN_HYPERV_TLBFLUSH:
+                         break;
+ 
+                     case VIR_DOMAIN_HYPERV_SPINLOCKS:
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index e450923019..d32514e7e6 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -1793,6 +1793,7 @@ typedef enum {
+     VIR_DOMAIN_HYPERV_VENDOR_ID,
+     VIR_DOMAIN_HYPERV_FREQUENCIES,
+     VIR_DOMAIN_HYPERV_REENLIGHTENMENT,
++    VIR_DOMAIN_HYPERV_TLBFLUSH,
+ 
+     VIR_DOMAIN_HYPERV_LAST
+ } virDomainHyperv;
+diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
+index 7a48b78eb9..7fa84f6014 100644
+--- a/src/cpu/cpu_x86.c
++++ b/src/cpu/cpu_x86.c
+@@ -113,6 +113,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_FREQUENCIES,
+                 0x40000003, 0x00000800);
+ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT,
+                 0x40000003, 0x00002000);
++KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_TLBFLUSH,
++                0x40000004, 0x00000004);
+ 
+ static virCPUx86Feature x86_kvm_features[] =
+ {
+@@ -135,6 +137,7 @@ static virCPUx86Feature x86_kvm_features[] =
+     KVM_FEATURE(VIR_CPU_x86_KVM_HV_RESET),
+     KVM_FEATURE(VIR_CPU_x86_KVM_HV_FREQUENCIES),
+     KVM_FEATURE(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT),
++    KVM_FEATURE(VIR_CPU_x86_KVM_HV_TLBFLUSH),
+ };
+ 
+ typedef struct _virCPUx86Model virCPUx86Model;
+diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h
+index a810c64fc9..090a21156f 100644
+--- a/src/cpu/cpu_x86_data.h
++++ b/src/cpu/cpu_x86_data.h
+@@ -65,6 +65,7 @@ struct _virCPUx86CPUID {
+ # define VIR_CPU_x86_KVM_HV_RESET     "__kvm_hv_reset"
+ # define VIR_CPU_x86_KVM_HV_FREQUENCIES "__kvm_hv_frequencies"
+ # define VIR_CPU_x86_KVM_HV_REENLIGHTENMENT "__kvm_hv_reenlightenment"
++# define VIR_CPU_x86_KVM_HV_TLBFLUSH  "__kvm_hv_tlbflush"
+ 
+ 
+ # define VIR_CPU_X86_DATA_INIT { 0 }
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 48f3b09ec9..a3d605c00f 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -6921,6 +6921,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
+             case VIR_DOMAIN_HYPERV_RESET:
+             case VIR_DOMAIN_HYPERV_FREQUENCIES:
+             case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
++            case VIR_DOMAIN_HYPERV_TLBFLUSH:
+                 if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON)
+                     virBufferAsprintf(&buf, ",hv_%s",
+                                       virDomainHypervTypeToString(i));
+diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c
+index 1e67a5a8c8..fdc1d34068 100644
+--- a/src/qemu/qemu_parse_command.c
++++ b/src/qemu/qemu_parse_command.c
+@@ -1538,6 +1538,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
+             case VIR_DOMAIN_HYPERV_RESET:
+             case VIR_DOMAIN_HYPERV_FREQUENCIES:
+             case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
++            case VIR_DOMAIN_HYPERV_TLBFLUSH:
+                 if (value) {
+                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                    _("HyperV feature '%s' should not "
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index 990d4d3046..23958bcbce 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -3925,6 +3925,7 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def,
+         case VIR_DOMAIN_HYPERV_RESET:
+         case VIR_DOMAIN_HYPERV_FREQUENCIES:
+         case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
++        case VIR_DOMAIN_HYPERV_TLBFLUSH:
+             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                            _("host doesn't support hyperv '%s' feature"),
+                            virDomainHypervTypeToString(i));
+diff --git a/tests/qemuxml2argvdata/hyperv-off.xml b/tests/qemuxml2argvdata/hyperv-off.xml
+index b2e3612df9..dc5777355f 100644
+--- a/tests/qemuxml2argvdata/hyperv-off.xml
++++ b/tests/qemuxml2argvdata/hyperv-off.xml
+@@ -22,6 +22,7 @@
+       <vendor_id state='off'/>
+       <frequencies state='off'/>
+       <reenlightenment state='off'/>
++      <tlbflush state='off'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args
+index 4feafad8e2..6ee6198fb0 100644
+--- a/tests/qemuxml2argvdata/hyperv.args
++++ b/tests/qemuxml2argvdata/hyperv.args
+@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \
+ -machine pc,accel=tcg,usb=off,dump-guest-core=off \
+ -cpu 'qemu32,hv_relaxed,hv_vapic,hv_spinlocks=0x2fff,hv_vpindex,hv_runtime,\
+ hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv,hv_frequencies,\
+-hv_reenlightenment' \
++hv_reenlightenment,hv_tlbflush' \
+ -m 214 \
+ -smp 6,sockets=6,cores=1,threads=1 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+diff --git a/tests/qemuxml2argvdata/hyperv.xml b/tests/qemuxml2argvdata/hyperv.xml
+index 20fcdba59e..816adf6907 100644
+--- a/tests/qemuxml2argvdata/hyperv.xml
++++ b/tests/qemuxml2argvdata/hyperv.xml
+@@ -22,6 +22,7 @@
+       <vendor_id state='on' value='KVM Hv'/>
+       <frequencies state='on'/>
+       <reenlightenment state='on'/>
++      <tlbflush state='on'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2xmloutdata/hyperv-off.xml b/tests/qemuxml2xmloutdata/hyperv-off.xml
+index 4a41e0c37e..77a8dac810 100644
+--- a/tests/qemuxml2xmloutdata/hyperv-off.xml
++++ b/tests/qemuxml2xmloutdata/hyperv-off.xml
+@@ -22,6 +22,7 @@
+       <vendor_id state='off'/>
+       <frequencies state='off'/>
+       <reenlightenment state='off'/>
++      <tlbflush state='off'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2xmloutdata/hyperv.xml b/tests/qemuxml2xmloutdata/hyperv.xml
+index 183b45980b..fc8c59a557 100644
+--- a/tests/qemuxml2xmloutdata/hyperv.xml
++++ b/tests/qemuxml2xmloutdata/hyperv.xml
+@@ -22,6 +22,7 @@
+       <vendor_id state='on' value='KVM Hv'/>
+       <frequencies state='on'/>
+       <reenlightenment state='on'/>
++      <tlbflush state='on'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-conf-qemu-add-support-for-Hyper-V-frequency-MSRs.patch b/SOURCES/libvirt-conf-qemu-add-support-for-Hyper-V-frequency-MSRs.patch
new file mode 100644
index 0000000..566f64a
--- /dev/null
+++ b/SOURCES/libvirt-conf-qemu-add-support-for-Hyper-V-frequency-MSRs.patch
@@ -0,0 +1,262 @@
+From b4335c3290082dd8aa0915e340b625197d80fdc3 Mon Sep 17 00:00:00 2001
+Message-Id: <b4335c3290082dd8aa0915e340b625197d80fdc3@dist-git>
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Thu, 9 Aug 2018 15:14:19 +0200
+Subject: [PATCH] conf: qemu: add support for Hyper-V frequency MSRs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Qemu-2.12 gained 'hv-frequencies' cpu flag to enable Hyper-V frequency
+MSRs. These MSRs are required (but not sufficient) to make Hyper-V on
+KVM pass stable TSC page clocksource to L2 guests.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 8253bca9615233f670c7dad659c120e4556a748a)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1589702
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/formatdomain.html.in               | 7 +++++++
+ docs/schemas/domaincommon.rng           | 5 +++++
+ src/conf/domain_conf.c                  | 6 +++++-
+ src/conf/domain_conf.h                  | 1 +
+ src/cpu/cpu_x86.c                       | 3 +++
+ src/cpu/cpu_x86_data.h                  | 1 +
+ src/qemu/qemu_command.c                 | 1 +
+ src/qemu/qemu_parse_command.c           | 1 +
+ src/qemu/qemu_process.c                 | 1 +
+ tests/qemuxml2argvdata/hyperv-off.xml   | 1 +
+ tests/qemuxml2argvdata/hyperv.args      | 2 +-
+ tests/qemuxml2argvdata/hyperv.xml       | 1 +
+ tests/qemuxml2xmloutdata/hyperv-off.xml | 1 +
+ tests/qemuxml2xmloutdata/hyperv.xml     | 1 +
+ 14 files changed, 30 insertions(+), 2 deletions(-)
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index 42acf7a828..3b493a98ac 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -1915,6 +1915,7 @@
+     &lt;synic state='on'/&gt;
+     &lt;reset state='on'/&gt;
+     &lt;vendor_id state='on' value='KVM Hv'/&gt;
++    &lt;frequencies state='on'/&gt;
+   &lt;/hyperv&gt;
+   &lt;kvm&gt;
+     &lt;hidden state='on'/&gt;
+@@ -2037,6 +2038,12 @@
+           <td>on, off; value - string, up to 12 characters</td>
+           <td><span class="since">1.3.3 (QEMU 2.5)</span></td>
+         </tr>
++        <tr>
++          <td>frequencies</td>
++          <td>Expose frequency MSRs</td>
++          <td> on, off</td>
++          <td><span class="since">4.7.0 (QEMU 2.12)</span></td>
++        </tr>
+       </table>
+       </dd>
+       <dt><code>pvspinlock</code></dt>
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index ac04af51a1..f156a6b7c4 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -5713,6 +5713,11 @@
+             </optional>
+           </element>
+         </optional>
++        <optional>
++          <element name="frequencies">
++            <ref name="featurestate"/>
++          </element>
++        </optional>
+       </interleave>
+     </element>
+   </define>
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 240b33f28c..150dd8acc8 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -169,7 +169,8 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST,
+               "synic",
+               "stimer",
+               "reset",
+-              "vendor_id")
++              "vendor_id",
++              "frequencies")
+ 
+ VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST,
+               "hidden")
+@@ -20051,6 +20052,7 @@ virDomainDefParseXML(xmlDocPtr xml,
+             case VIR_DOMAIN_HYPERV_SYNIC:
+             case VIR_DOMAIN_HYPERV_STIMER:
+             case VIR_DOMAIN_HYPERV_RESET:
++            case VIR_DOMAIN_HYPERV_FREQUENCIES:
+                 break;
+ 
+             case VIR_DOMAIN_HYPERV_SPINLOCKS:
+@@ -22242,6 +22244,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src,
+             case VIR_DOMAIN_HYPERV_SYNIC:
+             case VIR_DOMAIN_HYPERV_STIMER:
+             case VIR_DOMAIN_HYPERV_RESET:
++            case VIR_DOMAIN_HYPERV_FREQUENCIES:
+                 if (src->hyperv_features[i] != dst->hyperv_features[i]) {
+                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                    _("State of HyperV enlightenment "
+@@ -27890,6 +27893,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
+                     case VIR_DOMAIN_HYPERV_SYNIC:
+                     case VIR_DOMAIN_HYPERV_STIMER:
+                     case VIR_DOMAIN_HYPERV_RESET:
++                    case VIR_DOMAIN_HYPERV_FREQUENCIES:
+                         break;
+ 
+                     case VIR_DOMAIN_HYPERV_SPINLOCKS:
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index 5e2f21dea3..97d38ff7b9 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -1791,6 +1791,7 @@ typedef enum {
+     VIR_DOMAIN_HYPERV_STIMER,
+     VIR_DOMAIN_HYPERV_RESET,
+     VIR_DOMAIN_HYPERV_VENDOR_ID,
++    VIR_DOMAIN_HYPERV_FREQUENCIES,
+ 
+     VIR_DOMAIN_HYPERV_LAST
+ } virDomainHyperv;
+diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
+index 809da94117..a2fbfb577d 100644
+--- a/src/cpu/cpu_x86.c
++++ b/src/cpu/cpu_x86.c
+@@ -109,6 +109,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_VPINDEX,
+                 0x40000003, 0x00000040);
+ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_RESET,
+                 0x40000003, 0x00000080);
++KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_FREQUENCIES,
++                0x40000003, 0x00000800);
+ 
+ static virCPUx86Feature x86_kvm_features[] =
+ {
+@@ -129,6 +131,7 @@ static virCPUx86Feature x86_kvm_features[] =
+     KVM_FEATURE(VIR_CPU_x86_KVM_HV_VAPIC),
+     KVM_FEATURE(VIR_CPU_x86_KVM_HV_VPINDEX),
+     KVM_FEATURE(VIR_CPU_x86_KVM_HV_RESET),
++    KVM_FEATURE(VIR_CPU_x86_KVM_HV_FREQUENCIES),
+ };
+ 
+ typedef struct _virCPUx86Model virCPUx86Model;
+diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h
+index b89110f16c..c01eb41be5 100644
+--- a/src/cpu/cpu_x86_data.h
++++ b/src/cpu/cpu_x86_data.h
+@@ -63,6 +63,7 @@ struct _virCPUx86CPUID {
+ # define VIR_CPU_x86_KVM_HV_VAPIC     "__kvm_hv_vapic"
+ # define VIR_CPU_x86_KVM_HV_VPINDEX   "__kvm_hv_vpindex"
+ # define VIR_CPU_x86_KVM_HV_RESET     "__kvm_hv_reset"
++# define VIR_CPU_x86_KVM_HV_FREQUENCIES "__kvm_hv_frequencies"
+ 
+ 
+ # define VIR_CPU_X86_DATA_INIT { 0 }
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 028f48310b..82c349819e 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -6919,6 +6919,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
+             case VIR_DOMAIN_HYPERV_SYNIC:
+             case VIR_DOMAIN_HYPERV_STIMER:
+             case VIR_DOMAIN_HYPERV_RESET:
++            case VIR_DOMAIN_HYPERV_FREQUENCIES:
+                 if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON)
+                     virBufferAsprintf(&buf, ",hv_%s",
+                                       virDomainHypervTypeToString(i));
+diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c
+index 351425fedd..ffea9a26bd 100644
+--- a/src/qemu/qemu_parse_command.c
++++ b/src/qemu/qemu_parse_command.c
+@@ -1536,6 +1536,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
+             case VIR_DOMAIN_HYPERV_SYNIC:
+             case VIR_DOMAIN_HYPERV_STIMER:
+             case VIR_DOMAIN_HYPERV_RESET:
++            case VIR_DOMAIN_HYPERV_FREQUENCIES:
+                 if (value) {
+                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                    _("HyperV feature '%s' should not "
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index 2d51c0fa25..dd92a6c179 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -3923,6 +3923,7 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def,
+         case VIR_DOMAIN_HYPERV_SYNIC:
+         case VIR_DOMAIN_HYPERV_STIMER:
+         case VIR_DOMAIN_HYPERV_RESET:
++        case VIR_DOMAIN_HYPERV_FREQUENCIES:
+             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                            _("host doesn't support hyperv '%s' feature"),
+                            virDomainHypervTypeToString(i));
+diff --git a/tests/qemuxml2argvdata/hyperv-off.xml b/tests/qemuxml2argvdata/hyperv-off.xml
+index ba9c978848..d3a8455ac3 100644
+--- a/tests/qemuxml2argvdata/hyperv-off.xml
++++ b/tests/qemuxml2argvdata/hyperv-off.xml
+@@ -20,6 +20,7 @@
+       <stimer state='off'/>
+       <reset state='off'/>
+       <vendor_id state='off'/>
++      <frequencies state='off'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args
+index a1acbb63de..53026bb2d5 100644
+--- a/tests/qemuxml2argvdata/hyperv.args
++++ b/tests/qemuxml2argvdata/hyperv.args
+@@ -9,7 +9,7 @@ QEMU_AUDIO_DRV=none \
+ -S \
+ -machine pc,accel=tcg,usb=off,dump-guest-core=off \
+ -cpu 'qemu32,hv_relaxed,hv_vapic,hv_spinlocks=0x2fff,hv_vpindex,hv_runtime,\
+-hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv' \
++hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv,hv_frequencies' \
+ -m 214 \
+ -smp 6,sockets=6,cores=1,threads=1 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+diff --git a/tests/qemuxml2argvdata/hyperv.xml b/tests/qemuxml2argvdata/hyperv.xml
+index 09f6d21024..27372d1636 100644
+--- a/tests/qemuxml2argvdata/hyperv.xml
++++ b/tests/qemuxml2argvdata/hyperv.xml
+@@ -20,6 +20,7 @@
+       <stimer state='on'/>
+       <reset state='on'/>
+       <vendor_id state='on' value='KVM Hv'/>
++      <frequencies state='on'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2xmloutdata/hyperv-off.xml b/tests/qemuxml2xmloutdata/hyperv-off.xml
+index 07eaf7219d..3ba0b827c3 100644
+--- a/tests/qemuxml2xmloutdata/hyperv-off.xml
++++ b/tests/qemuxml2xmloutdata/hyperv-off.xml
+@@ -20,6 +20,7 @@
+       <stimer state='off'/>
+       <reset state='off'/>
+       <vendor_id state='off'/>
++      <frequencies state='off'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2xmloutdata/hyperv.xml b/tests/qemuxml2xmloutdata/hyperv.xml
+index f9ae9504de..1e47a946d6 100644
+--- a/tests/qemuxml2xmloutdata/hyperv.xml
++++ b/tests/qemuxml2xmloutdata/hyperv.xml
+@@ -20,6 +20,7 @@
+       <stimer state='on'/>
+       <reset state='on'/>
+       <vendor_id state='on' value='KVM Hv'/>
++      <frequencies state='on'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-conf-qemu-add-support-for-Hyper-V-reenlightenment-notifications.patch b/SOURCES/libvirt-conf-qemu-add-support-for-Hyper-V-reenlightenment-notifications.patch
new file mode 100644
index 0000000..3369c8a
--- /dev/null
+++ b/SOURCES/libvirt-conf-qemu-add-support-for-Hyper-V-reenlightenment-notifications.patch
@@ -0,0 +1,264 @@
+From 7b4320c2371e10cf717c7bc28f83485cf176e03d Mon Sep 17 00:00:00 2001
+Message-Id: <7b4320c2371e10cf717c7bc28f83485cf176e03d@dist-git>
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Thu, 9 Aug 2018 15:14:20 +0200
+Subject: [PATCH] conf: qemu: add support for Hyper-V reenlightenment
+ notifications
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Qemu-3.0 supports so-called 'Reenlightenment' notifications and this (in
+conjunction with 'hv-frequencies') can be used make Hyper-V on KVM pass
+stable TSC page clocksource to L2 guests.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit b5d770e155cbb7eec036b3d33ee0d81863ffc9a1)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1589702
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/formatdomain.html.in               | 7 +++++++
+ docs/schemas/domaincommon.rng           | 5 +++++
+ src/conf/domain_conf.c                  | 6 +++++-
+ src/conf/domain_conf.h                  | 1 +
+ src/cpu/cpu_x86.c                       | 3 +++
+ src/cpu/cpu_x86_data.h                  | 1 +
+ src/qemu/qemu_command.c                 | 1 +
+ src/qemu/qemu_parse_command.c           | 1 +
+ src/qemu/qemu_process.c                 | 1 +
+ tests/qemuxml2argvdata/hyperv-off.xml   | 1 +
+ tests/qemuxml2argvdata/hyperv.args      | 3 ++-
+ tests/qemuxml2argvdata/hyperv.xml       | 1 +
+ tests/qemuxml2xmloutdata/hyperv-off.xml | 1 +
+ tests/qemuxml2xmloutdata/hyperv.xml     | 1 +
+ 14 files changed, 31 insertions(+), 2 deletions(-)
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index 3b493a98ac..43a1067501 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -1916,6 +1916,7 @@
+     &lt;reset state='on'/&gt;
+     &lt;vendor_id state='on' value='KVM Hv'/&gt;
+     &lt;frequencies state='on'/&gt;
++    &lt;reenlightenment state='on'/&gt;
+   &lt;/hyperv&gt;
+   &lt;kvm&gt;
+     &lt;hidden state='on'/&gt;
+@@ -2044,6 +2045,12 @@
+           <td> on, off</td>
+           <td><span class="since">4.7.0 (QEMU 2.12)</span></td>
+         </tr>
++        <tr>
++          <td>reenlightenment</td>
++          <td>Enable re-enlightenment notification on migration</td>
++          <td> on, off</td>
++          <td><span class="since">4.7.0 (QEMU 3.0)</span></td>
++        </tr>
+       </table>
+       </dd>
+       <dt><code>pvspinlock</code></dt>
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index f156a6b7c4..ceee7a8efe 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -5718,6 +5718,11 @@
+             <ref name="featurestate"/>
+           </element>
+         </optional>
++        <optional>
++          <element name="reenlightenment">
++            <ref name="featurestate"/>
++          </element>
++        </optional>
+       </interleave>
+     </element>
+   </define>
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 150dd8acc8..18b4d03a61 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -170,7 +170,8 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST,
+               "stimer",
+               "reset",
+               "vendor_id",
+-              "frequencies")
++              "frequencies",
++              "reenlightenment")
+ 
+ VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST,
+               "hidden")
+@@ -20053,6 +20054,7 @@ virDomainDefParseXML(xmlDocPtr xml,
+             case VIR_DOMAIN_HYPERV_STIMER:
+             case VIR_DOMAIN_HYPERV_RESET:
+             case VIR_DOMAIN_HYPERV_FREQUENCIES:
++            case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
+                 break;
+ 
+             case VIR_DOMAIN_HYPERV_SPINLOCKS:
+@@ -22245,6 +22247,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src,
+             case VIR_DOMAIN_HYPERV_STIMER:
+             case VIR_DOMAIN_HYPERV_RESET:
+             case VIR_DOMAIN_HYPERV_FREQUENCIES:
++            case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
+                 if (src->hyperv_features[i] != dst->hyperv_features[i]) {
+                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                    _("State of HyperV enlightenment "
+@@ -27894,6 +27897,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
+                     case VIR_DOMAIN_HYPERV_STIMER:
+                     case VIR_DOMAIN_HYPERV_RESET:
+                     case VIR_DOMAIN_HYPERV_FREQUENCIES:
++                    case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
+                         break;
+ 
+                     case VIR_DOMAIN_HYPERV_SPINLOCKS:
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index 97d38ff7b9..e450923019 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -1792,6 +1792,7 @@ typedef enum {
+     VIR_DOMAIN_HYPERV_RESET,
+     VIR_DOMAIN_HYPERV_VENDOR_ID,
+     VIR_DOMAIN_HYPERV_FREQUENCIES,
++    VIR_DOMAIN_HYPERV_REENLIGHTENMENT,
+ 
+     VIR_DOMAIN_HYPERV_LAST
+ } virDomainHyperv;
+diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
+index a2fbfb577d..7a48b78eb9 100644
+--- a/src/cpu/cpu_x86.c
++++ b/src/cpu/cpu_x86.c
+@@ -111,6 +111,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_RESET,
+                 0x40000003, 0x00000080);
+ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_FREQUENCIES,
+                 0x40000003, 0x00000800);
++KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT,
++                0x40000003, 0x00002000);
+ 
+ static virCPUx86Feature x86_kvm_features[] =
+ {
+@@ -132,6 +134,7 @@ static virCPUx86Feature x86_kvm_features[] =
+     KVM_FEATURE(VIR_CPU_x86_KVM_HV_VPINDEX),
+     KVM_FEATURE(VIR_CPU_x86_KVM_HV_RESET),
+     KVM_FEATURE(VIR_CPU_x86_KVM_HV_FREQUENCIES),
++    KVM_FEATURE(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT),
+ };
+ 
+ typedef struct _virCPUx86Model virCPUx86Model;
+diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h
+index c01eb41be5..a810c64fc9 100644
+--- a/src/cpu/cpu_x86_data.h
++++ b/src/cpu/cpu_x86_data.h
+@@ -64,6 +64,7 @@ struct _virCPUx86CPUID {
+ # define VIR_CPU_x86_KVM_HV_VPINDEX   "__kvm_hv_vpindex"
+ # define VIR_CPU_x86_KVM_HV_RESET     "__kvm_hv_reset"
+ # define VIR_CPU_x86_KVM_HV_FREQUENCIES "__kvm_hv_frequencies"
++# define VIR_CPU_x86_KVM_HV_REENLIGHTENMENT "__kvm_hv_reenlightenment"
+ 
+ 
+ # define VIR_CPU_X86_DATA_INIT { 0 }
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 82c349819e..48f3b09ec9 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -6920,6 +6920,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
+             case VIR_DOMAIN_HYPERV_STIMER:
+             case VIR_DOMAIN_HYPERV_RESET:
+             case VIR_DOMAIN_HYPERV_FREQUENCIES:
++            case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
+                 if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON)
+                     virBufferAsprintf(&buf, ",hv_%s",
+                                       virDomainHypervTypeToString(i));
+diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c
+index ffea9a26bd..1e67a5a8c8 100644
+--- a/src/qemu/qemu_parse_command.c
++++ b/src/qemu/qemu_parse_command.c
+@@ -1537,6 +1537,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
+             case VIR_DOMAIN_HYPERV_STIMER:
+             case VIR_DOMAIN_HYPERV_RESET:
+             case VIR_DOMAIN_HYPERV_FREQUENCIES:
++            case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
+                 if (value) {
+                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                    _("HyperV feature '%s' should not "
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index dd92a6c179..990d4d3046 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -3924,6 +3924,7 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def,
+         case VIR_DOMAIN_HYPERV_STIMER:
+         case VIR_DOMAIN_HYPERV_RESET:
+         case VIR_DOMAIN_HYPERV_FREQUENCIES:
++        case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
+             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                            _("host doesn't support hyperv '%s' feature"),
+                            virDomainHypervTypeToString(i));
+diff --git a/tests/qemuxml2argvdata/hyperv-off.xml b/tests/qemuxml2argvdata/hyperv-off.xml
+index d3a8455ac3..b2e3612df9 100644
+--- a/tests/qemuxml2argvdata/hyperv-off.xml
++++ b/tests/qemuxml2argvdata/hyperv-off.xml
+@@ -21,6 +21,7 @@
+       <reset state='off'/>
+       <vendor_id state='off'/>
+       <frequencies state='off'/>
++      <reenlightenment state='off'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args
+index 53026bb2d5..4feafad8e2 100644
+--- a/tests/qemuxml2argvdata/hyperv.args
++++ b/tests/qemuxml2argvdata/hyperv.args
+@@ -9,7 +9,8 @@ QEMU_AUDIO_DRV=none \
+ -S \
+ -machine pc,accel=tcg,usb=off,dump-guest-core=off \
+ -cpu 'qemu32,hv_relaxed,hv_vapic,hv_spinlocks=0x2fff,hv_vpindex,hv_runtime,\
+-hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv,hv_frequencies' \
++hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv,hv_frequencies,\
++hv_reenlightenment' \
+ -m 214 \
+ -smp 6,sockets=6,cores=1,threads=1 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+diff --git a/tests/qemuxml2argvdata/hyperv.xml b/tests/qemuxml2argvdata/hyperv.xml
+index 27372d1636..20fcdba59e 100644
+--- a/tests/qemuxml2argvdata/hyperv.xml
++++ b/tests/qemuxml2argvdata/hyperv.xml
+@@ -21,6 +21,7 @@
+       <reset state='on'/>
+       <vendor_id state='on' value='KVM Hv'/>
+       <frequencies state='on'/>
++      <reenlightenment state='on'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2xmloutdata/hyperv-off.xml b/tests/qemuxml2xmloutdata/hyperv-off.xml
+index 3ba0b827c3..4a41e0c37e 100644
+--- a/tests/qemuxml2xmloutdata/hyperv-off.xml
++++ b/tests/qemuxml2xmloutdata/hyperv-off.xml
+@@ -21,6 +21,7 @@
+       <reset state='off'/>
+       <vendor_id state='off'/>
+       <frequencies state='off'/>
++      <reenlightenment state='off'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2xmloutdata/hyperv.xml b/tests/qemuxml2xmloutdata/hyperv.xml
+index 1e47a946d6..183b45980b 100644
+--- a/tests/qemuxml2xmloutdata/hyperv.xml
++++ b/tests/qemuxml2xmloutdata/hyperv.xml
+@@ -21,6 +21,7 @@
+       <reset state='on'/>
+       <vendor_id state='on' value='KVM Hv'/>
+       <frequencies state='on'/>
++      <reenlightenment state='on'/>
+     </hyperv>
+   </features>
+   <clock offset='utc'/>
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-configure-change-HAVE_FIREWALLD-to-WITH_FIREWALLD.patch b/SOURCES/libvirt-configure-change-HAVE_FIREWALLD-to-WITH_FIREWALLD.patch
new file mode 100644
index 0000000..c23f866
--- /dev/null
+++ b/SOURCES/libvirt-configure-change-HAVE_FIREWALLD-to-WITH_FIREWALLD.patch
@@ -0,0 +1,110 @@
+From 5b3cf2163da13ac79129ca2bb85ae1908922644c Mon Sep 17 00:00:00 2001
+Message-Id: <5b3cf2163da13ac79129ca2bb85ae1908922644c@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Fri, 1 Feb 2019 20:29:27 -0500
+Subject: [PATCH] configure: change HAVE_FIREWALLD to WITH_FIREWALLD
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Support for firewalld is a feature that can be selectively enabled or
+disabled (using --with-firewalld/--without-firewalld), not merely
+something that must be accounted for in the code if it is present with
+no exceptions. It is more consistent with other usage in libvirt to
+use WITH_FIREWALLD rather than HAVE_FIREWALLD.
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 4bf0f390ed57307050a213f3f6364061f2717b00)
+
+https://bugzilla.redhat.com/1650320
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ m4/virt-firewalld.m4           | 4 ++--
+ src/network/bridge_driver.c    | 6 +++---
+ src/nwfilter/nwfilter_driver.c | 6 +++---
+ 3 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/m4/virt-firewalld.m4 b/m4/virt-firewalld.m4
+index 08d2ff83d6..89efa47589 100644
+--- a/m4/virt-firewalld.m4
++++ b/m4/virt-firewalld.m4
+@@ -32,10 +32,10 @@ AC_DEFUN([LIBVIRT_CHECK_FIREWALLD], [
+     if test "x$with_dbus" != "xyes" ; then
+       AC_MSG_ERROR([You must have dbus enabled for firewalld support])
+     fi
+-    AC_DEFINE_UNQUOTED([HAVE_FIREWALLD], [1], [whether firewalld support is enabled])
++    AC_DEFINE_UNQUOTED([WITH_FIREWALLD], [1], [whether firewalld support is enabled])
+   fi
+ 
+-  AM_CONDITIONAL([HAVE_FIREWALLD], [test "x$with_firewalld" != "xno"])
++  AM_CONDITIONAL([WITH_FIREWALLD], [test "x$with_firewalld" != "xno"])
+ ])
+ 
+ AC_DEFUN([LIBVIRT_RESULT_FIREWALLD], [
+diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
+index 1ad95d524c..d153a8cdb6 100644
+--- a/src/network/bridge_driver.c
++++ b/src/network/bridge_driver.c
+@@ -538,7 +538,7 @@ networkAutostartConfig(virNetworkObjPtr obj,
+ }
+ 
+ 
+-#if HAVE_FIREWALLD
++#ifdef WITH_FIREWALLD
+ static DBusHandlerResult
+ firewalld_dbus_filter_bridge(DBusConnection *connection ATTRIBUTE_UNUSED,
+                              DBusMessage *message,
+@@ -659,7 +659,7 @@ networkStateInitialize(bool privileged,
+     int ret = -1;
+     char *configdir = NULL;
+     char *rundir = NULL;
+-#ifdef HAVE_FIREWALLD
++#ifdef WITH_FIREWALLD
+     DBusConnection *sysbus = NULL;
+ #endif
+ 
+@@ -757,7 +757,7 @@ networkStateInitialize(bool privileged,
+ 
+     network_driver->networkEventState = virObjectEventStateNew();
+ 
+-#ifdef HAVE_FIREWALLD
++#ifdef WITH_FIREWALLD
+     if (!(sysbus = virDBusGetSystemBus())) {
+         VIR_WARN("DBus not available, disabling firewalld support "
+                  "in bridge_network_driver: %s", virGetLastErrorMessage());
+diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c
+index ed34586105..a657b750e6 100644
+--- a/src/nwfilter/nwfilter_driver.c
++++ b/src/nwfilter/nwfilter_driver.c
+@@ -79,7 +79,7 @@ static void nwfilterDriverUnlock(void)
+     virMutexUnlock(&driver->lock);
+ }
+ 
+-#if HAVE_FIREWALLD
++#ifdef WITH_FIREWALLD
+ 
+ static DBusHandlerResult
+ nwfilterFirewalldDBusFilter(DBusConnection *connection ATTRIBUTE_UNUSED,
+@@ -148,7 +148,7 @@ nwfilterDriverInstallDBusMatches(DBusConnection *sysbus)
+     return ret;
+ }
+ 
+-#else /* HAVE_FIREWALLD */
++#else /* WITH_FIREWALLD */
+ 
+ static void
+ nwfilterDriverRemoveDBusMatches(void)
+@@ -161,7 +161,7 @@ nwfilterDriverInstallDBusMatches(DBusConnection *sysbus ATTRIBUTE_UNUSED)
+     return 0;
+ }
+ 
+-#endif /* HAVE_FIREWALLD */
++#endif /* WITH_FIREWALLD */
+ 
+ static int
+ virNWFilterTriggerRebuildImpl(void *opaque)
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-configure-selectively-install-a-firewalld-libvirt-zone.patch b/SOURCES/libvirt-configure-selectively-install-a-firewalld-libvirt-zone.patch
new file mode 100644
index 0000000..28307d8
--- /dev/null
+++ b/SOURCES/libvirt-configure-selectively-install-a-firewalld-libvirt-zone.patch
@@ -0,0 +1,280 @@
+From f89135129d722dca4e5eb7dbcc6845ab757f2e08 Mon Sep 17 00:00:00 2001
+Message-Id: <f89135129d722dca4e5eb7dbcc6845ab757f2e08@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Fri, 1 Feb 2019 20:29:30 -0500
+Subject: [PATCH] configure: selectively install a firewalld 'libvirt' zone
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In the past (when both libvirt and firewalld used iptables), if either
+libvirt's rules *OR* firewalld's rules accepted a packet, it would
+be accepted. This was because libvirt and firewalld rules were
+processed during the same kernel hook, and a single ACCEPT result
+would terminate the rule traversal and cause the packet to be
+accepted.
+
+But now firewalld can use nftables for its backend, while libvirt's
+firewall rules are still using iptables; iptables rules are still
+processed, but at a different time during packet processing
+(i.e. during a different hook) than the firewalld nftables rules. The
+result is that a packet must be accepted by *BOTH* the libvirt
+iptables rules *AND* the firewalld nftable rules in order to be
+accepted.
+
+This causes pain because
+
+1) libvirt always adds rules to permit DNS and DHCP (and sometimes
+TFTP) from guests to the host network's bridge interface. But
+libvirt's bridges are in firewalld's "default" zone (which is usually
+the zone called "public"). The public zone allows ssh, but doesn't
+allow DNS, DHCP, or TFTP. So even though libvirt's rules allow the
+DHCP and DNS traffic, the firewalld rules (now processed during a
+different hook) dont, thus guests connected to libvirt's bridges can't
+acquire an IP address from DHCP, nor can they make DNS queries to the
+DNS server libvirt has setup on the host. (This could be solved by
+modifying the default firewalld zone to allow DNS and DHCP, but that
+would open *all* interfaces in the default zone to those services,
+which is most likely not what the host's admin wants.)
+
+2) Even though libvirt adds iptables rules to allow forwarded traffic
+to pass the iptables hook, firewalld's higher level "rich rules" don't
+yet have the ability to configure the acceptance of forwarded traffic
+(traffic that is going somewhere beyond the host), so any traffic that
+needs to be forwarded from guests to the network beyond the host is
+rejected during the nftables hook by the default zone's "default
+reject" policy (which rejects all traffic in the zone not specifically
+allowed by the rules in the zone, whether that traffic is destined to
+be forwarded or locally received by the host).
+
+libvirt can't send "direct" nftables rules (firewalld only supports
+direct/passthrough rules for iptables), so we can't solve this problem
+by just sending explicit nftables rules instead of explicit iptables
+rules (which, if it could be done, would place libvirt's rules in the
+same hook as firewalld's native rules, and thus eliminate the need for
+packets to be accepted by both libvirt's and firewalld's own rules).
+
+However, we can take advantage of a quirk in firewalld zones that have
+a default policy of "accept" (meaning any packet that doesn't match a
+specific rule in the zone will be *accepted*) - this default accept will
+also accept forwarded traffic (not just traffic destined for the host).
+
+Of course we don't want to modify firewalld's default zone in that
+way, because that would affect the filtering of traffic coming into
+the host from other interfaces using that zone. Instead, we will
+create a new zone called "libvirt". The libvirt zone will have a
+default policy of accept so that forwarded traffic can pass and list
+specific services that will be allowed into the host from guests (DNS,
+DHCP, SSH, and TFTP).
+
+But the same default accept policy that fixes forwarded traffic also
+causes *all* traffic from guest to host to be accepted. To close this
+new hole, the libvirt zone can take advantage of a new feature in
+firewalld (currently slated for firewalld-0.7.0) - priorities for rich
+rules - to add a low priority rule that rejects all local traffic (but
+leaves alone all forwarded traffic).
+
+So, our new zone will start with a list of services that are allowed
+(dhcp, dns, tftp, and ssh to start, but configurable via any firewalld
+management application, or direct editing of the zone file in
+/etc/firewalld/zones/libvirt.xml), followed by a low priority
+<reject/> rule (to reject all other traffic from guest to host), and
+finally with a default policy of accept (to allow forwarded traffic).
+
+This patch only creates the zonefile for the new zone, and implements
+a configure.ac option to selectively enable/disable installation of
+the new zone. A separate patch contains the necessary code to actually
+place bridge interfaces in the libvirt zone.
+
+Why do we need a configure option to disable installation of the new
+libvirt zone? It uses a new firewalld attribute that sets the priority
+of a rich rule; this feature first appears in firewalld-0.7.0 (unless
+it has been backported to am earlier firewalld by a downstream
+maintainer). If the file were installed on a system with firewalld
+that didn't support rule priorities, firewalld would log an error
+every time it restarted, causing confusion and lots of extra bug
+reports.
+
+So we add two new configure.ac switches to avoid polluting the system
+logs with this error on systems that don't support rule priorities -
+"--with-firewalld-zone" and "--without-firewalld-zone". A package
+builder can use these to include/exclude the libvirt zone file in the
+installation. If firewalld is enabled (--with-firewalld), the default
+is --with-firewalld-zone, but it can be disabled during configure
+(using --without-firewalld-zone). Targets that are using a firewalld
+version too old to support the rule priority setting in the libvirt
+zone file can simply add --without-firewalld-zone to their configure
+commandline.
+
+These switches only affect whether or not the libvirt zone file is
+*installed* in /usr/lib/firewalld/zones, but have no effect on whether
+or not libvirt looks for a zone called libvirt and tries to use it.
+
+NB: firewalld zones can only be added to the permanent config of
+firewalld, and won't be loaded/enabled until firewalld is restarted,
+so at package install/upgrade time we have to restart firewalld. For
+rpm-based distros, this is done in the libvirt.spec file by calling
+the %firewalld_restart rpm macro, which is a part of the
+firewalld-filesystem package. (For distros that don't use rpm
+packages, the command "firewalld-cmd --reload" will have the same
+effect).
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 3b71f2e42dc6c5453d09136578bfb868874da088)
+
+https://bugzilla.redhat.com/1650320
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ configure.ac                |  3 +++
+ libvirt.spec.in             | 31 +++++++++++++++++++++++++
+ m4/virt-firewalld-zone.m4   | 45 +++++++++++++++++++++++++++++++++++++
+ src/network/Makefile.inc.am | 10 ++++++++-
+ src/network/libvirt.zone    | 23 +++++++++++++++++++
+ 5 files changed, 111 insertions(+), 1 deletion(-)
+ create mode 100644 m4/virt-firewalld-zone.m4
+ create mode 100644 src/network/libvirt.zone
+
+diff --git a/configure.ac b/configure.ac
+index e25bf0a6ec..3da26484d0 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -247,6 +247,7 @@ LIBVIRT_ARG_CAPNG
+ LIBVIRT_ARG_CURL
+ LIBVIRT_ARG_DBUS
+ LIBVIRT_ARG_FIREWALLD
++LIBVIRT_ARG_FIREWALLD_ZONE
+ LIBVIRT_ARG_FUSE
+ LIBVIRT_ARG_GLUSTER
+ LIBVIRT_ARG_HAL
+@@ -286,6 +287,7 @@ LIBVIRT_CHECK_DBUS
+ LIBVIRT_CHECK_DEVMAPPER
+ LIBVIRT_CHECK_DLOPEN
+ LIBVIRT_CHECK_FIREWALLD
++LIBVIRT_CHECK_FIREWALLD_ZONE
+ LIBVIRT_CHECK_FUSE
+ LIBVIRT_CHECK_GLUSTER
+ LIBVIRT_CHECK_GNUTLS
+@@ -959,6 +961,7 @@ LIBVIRT_RESULT_CURL
+ LIBVIRT_RESULT_DBUS
+ LIBVIRT_RESULT_DLOPEN
+ LIBVIRT_RESULT_FIREWALLD
++LIBVIRT_RESULT_FIREWALLD_ZONE
+ LIBVIRT_RESULT_FUSE
+ LIBVIRT_RESULT_GLUSTER
+ LIBVIRT_RESULT_GNUTLS
+diff --git a/m4/virt-firewalld-zone.m4 b/m4/virt-firewalld-zone.m4
+new file mode 100644
+index 0000000000..b67d1a0b2f
+--- /dev/null
++++ b/m4/virt-firewalld-zone.m4
+@@ -0,0 +1,45 @@
++dnl firewalld_zone check - whether or not to install the firewall "libvirt" zone
++dnl
++dnl Copyright (C) 2019 Red Hat, Inc.
++dnl
++dnl This library is free software; you can redistribute it and/or
++dnl modify it under the terms of the GNU Lesser General Public
++dnl License as published by the Free Software Foundation; either
++dnl version 2.1 of the License, or (at your option) any later version.
++dnl
++dnl This library is distributed in the hope that it will be useful,
++dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
++dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++dnl Lesser General Public License for more details.
++dnl
++dnl You should have received a copy of the GNU Lesser General Public
++dnl License along with this library.  If not, see
++dnl <http://www.gnu.org/licenses/>.
++dnl
++
++AC_DEFUN([LIBVIRT_ARG_FIREWALLD_ZONE], [
++  LIBVIRT_ARG_WITH([FIREWALLD_ZONE], [Whether to install firewalld libvirt zone], [check])
++])
++
++AC_DEFUN([LIBVIRT_CHECK_FIREWALLD_ZONE], [
++  AC_REQUIRE([LIBVIRT_CHECK_FIREWALLD])
++  AC_MSG_CHECKING([for whether to install firewalld libvirt zone])
++
++  if test "x$with_firewalld_zone" = "xcheck" ; then
++    with_firewalld_zone=$with_firewalld
++  fi
++
++  if test "x$with_firewalld_zone" = "xyes" ; then
++    if test "x$with_firewalld" != "xyes" ; then
++      AC_MSG_ERROR([You must have firewalld support enabled to enable firewalld-zone])
++    fi
++    AC_DEFINE_UNQUOTED([WITH_FIREWALLD_ZONE], [1], [whether firewalld libvirt zone is installed])
++  fi
++
++  AM_CONDITIONAL([WITH_FIREWALLD_ZONE], [test "x$with_firewalld_zone" != "xno"])
++  AC_MSG_RESULT($with_firewalld_zone)
++])
++
++AC_DEFUN([LIBVIRT_RESULT_FIREWALLD_ZONE], [
++  LIBVIRT_RESULT([firewalld-zone], [$with_firewalld_zone])
++])
+diff --git a/src/network/Makefile.inc.am b/src/network/Makefile.inc.am
+index 508c8c0422..cbaaa7ea68 100644
+--- a/src/network/Makefile.inc.am
++++ b/src/network/Makefile.inc.am
+@@ -87,6 +87,11 @@ install-data-network:
+ 	( cd $(DESTDIR)$(confdir)/qemu/networks/autostart && \
+ 	  rm -f default.xml && \
+ 	  $(LN_S) ../default.xml default.xml )
++if WITH_FIREWALLD_ZONE
++	$(MKDIR_P) "$(DESTDIR)$(prefix)/lib/firewalld/zones"
++	$(INSTALL_DATA) $(srcdir)/network/libvirt.zone \
++	  $(DESTDIR)$(prefix)/lib/firewalld/zones/libvirt.xml
++endif WITH_FIREWALLD_ZONE
+ 
+ uninstall-data-network:
+ 	rm -f $(DESTDIR)$(confdir)/qemu/networks/autostart/default.xml
+@@ -95,10 +100,13 @@ uninstall-data-network:
+ 	rmdir "$(DESTDIR)$(confdir)/qemu/networks" || :
+ 	rmdir "$(DESTDIR)$(localstatedir)/lib/libvirt/network" ||:
+ 	rmdir "$(DESTDIR)$(localstatedir)/run/libvirt/network" ||:
++if WITH_FIREWALLD_ZONE
++	rm -f  $(DESTDIR)$(prefix)/lib/firewalld/zones/libvirt.xml
++endif WITH_FIREWALLD_ZONE
+ 
+ endif WITH_NETWORK
+ 
+-EXTRA_DIST += network/default.xml
++EXTRA_DIST += network/default.xml network/libvirt.zone
+ 
+ .PHONY: \
+ 	install-data-network \
+diff --git a/src/network/libvirt.zone b/src/network/libvirt.zone
+new file mode 100644
+index 0000000000..bf81db1b6e
+--- /dev/null
++++ b/src/network/libvirt.zone
+@@ -0,0 +1,23 @@
++<?xml version="1.0" encoding="utf-8"?>
++<zone target="ACCEPT">
++  <short>libvirt</short>
++
++  <description>
++    The default policy of "ACCEPT" allows all packets to/from
++    interfaces in the zone to be forwarded, while the (*low priority*)
++    reject rule blocks any traffic destined for the host, except those
++    services explicitly listed (that list can be modified as required
++    by the local admin). This zone is intended to be used only by
++    libvirt virtual networks - libvirt will add the bridge devices for
++    all new virtual networks to this zone by default.
++  </description>
++
++<rule priority='32767'>
++  <reject/>
++</rule>
++<service name='dhcp'/>
++<service name='dhcpv6'/>
++<service name='dns'/>
++<service name='ssh'/>
++<service name='tftp'/>
++</zone>
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-cpu-Add-support-for-stibp-x86_64-feature.patch b/SOURCES/libvirt-cpu-Add-support-for-stibp-x86_64-feature.patch
new file mode 100644
index 0000000..aea8214
--- /dev/null
+++ b/SOURCES/libvirt-cpu-Add-support-for-stibp-x86_64-feature.patch
@@ -0,0 +1,202 @@
+From 41a79702b10fc039aa76524626b77f91dc01edbd Mon Sep 17 00:00:00 2001
+Message-Id: <41a79702b10fc039aa76524626b77f91dc01edbd@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Mon, 17 Dec 2018 16:24:32 +0100
+Subject: [PATCH] cpu: Add support for "stibp" x86_64 feature
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+QEMU commit v3.1.0-4-g0e89165829
+KVM patch: https://lore.kernel.org/lkml/20181205191956.31480-1-ehabkost@redhat.com/
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit eb1b551d21e316c1e80aba0b2af6969fdd849f0c)
+
+Conflicts:
+	src/cpu_map/x86_features.xml
+            - cpu_map.xml is still monolithic in RHEL-8
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1655032
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/cpu/cpu_map.xml                                            | 3 +++
+ tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-disabled.xml | 2 +-
+ tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-guest.xml    | 1 +
+ tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-host.xml     | 1 +
+ tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-disabled.xml    | 2 +-
+ tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-guest.xml       | 1 +
+ tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-host.xml        | 1 +
+ tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-disabled.xml    | 2 +-
+ tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-guest.xml       | 1 +
+ tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-host.xml        | 1 +
+ tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-disabled.xml     | 2 +-
+ tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-guest.xml        | 1 +
+ tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-host.xml         | 1 +
+ 13 files changed, 15 insertions(+), 4 deletions(-)
+
+diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
+index cdb023e936..095d49a69a 100644
+--- a/src/cpu/cpu_map.xml
++++ b/src/cpu/cpu_map.xml
+@@ -328,6 +328,9 @@
+     <feature name='spec-ctrl'>
+       <cpuid eax_in='0x07' ecx_in='0x00' edx='0x04000000'/>
+     </feature>
++    <feature name='stibp'>
++      <cpuid eax_in='0x07' ecx_in='0x00' edx='0x08000000'/>
++    </feature>
+     <feature name='ssbd'>
+       <cpuid eax_in='0x07' ecx_in='0x00' edx='0x80000000'/>
+     </feature>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-disabled.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-disabled.xml
+index e033bb141f..5c9cfa9bd6 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-disabled.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-disabled.xml
+@@ -1,6 +1,6 @@
+ <!-- Features disabled by QEMU -->
+ <cpudata arch='x86'>
+   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0800c1dc' edx='0xb0600000'/>
+-  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x04000000'/>
++  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x0c000000'/>
+   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
+ </cpudata>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-guest.xml
+index 4fa4770208..5d3093cec1 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-guest.xml
+@@ -23,6 +23,7 @@
+   <feature policy='require' name='arat'/>
+   <feature policy='require' name='tsc_adjust'/>
+   <feature policy='require' name='intel-pt'/>
++  <feature policy='require' name='stibp'/>
+   <feature policy='require' name='xsaveopt'/>
+   <feature policy='require' name='pdpe1gb'/>
+   <feature policy='require' name='abm'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-host.xml
+index 25690c099c..a534d2dec5 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-host.xml
+@@ -24,6 +24,7 @@
+   <feature name='arat'/>
+   <feature name='tsc_adjust'/>
+   <feature name='intel-pt'/>
++  <feature name='stibp'/>
+   <feature name='xsaveopt'/>
+   <feature name='pdpe1gb'/>
+   <feature name='abm'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-disabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-disabled.xml
+index aacc7a2b14..ec299652f7 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-disabled.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-disabled.xml
+@@ -1,6 +1,6 @@
+ <!-- Features disabled by QEMU -->
+ <cpudata arch='x86'>
+   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0804c1fc' edx='0xb0600000'/>
+-  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00001000' ecx='0x00000000' edx='0x00000000'/>
++  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00001000' ecx='0x00000000' edx='0x08000000'/>
+   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
+ </cpudata>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-guest.xml
+index a66c7a5644..d8aaaad29d 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-guest.xml
+@@ -24,6 +24,7 @@
+   <feature policy='require' name='arat'/>
+   <feature policy='require' name='tsc_adjust'/>
+   <feature policy='require' name='cmt'/>
++  <feature policy='require' name='stibp'/>
+   <feature policy='require' name='xsaveopt'/>
+   <feature policy='require' name='pdpe1gb'/>
+   <feature policy='require' name='abm'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-host.xml
+index 624d71db20..9bac4b4648 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-host.xml
+@@ -25,6 +25,7 @@
+   <feature name='arat'/>
+   <feature name='tsc_adjust'/>
+   <feature name='cmt'/>
++  <feature name='stibp'/>
+   <feature name='xsaveopt'/>
+   <feature name='pdpe1gb'/>
+   <feature name='abm'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-disabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-disabled.xml
+index d904808cec..85369d755c 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-disabled.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-disabled.xml
+@@ -1,7 +1,7 @@
+ <!-- Features disabled by QEMU -->
+ <cpudata arch='x86'>
+   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0804c1fc' edx='0xb0600000'/>
+-  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00001000' ecx='0x00000000' edx='0x00000000'/>
++  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00001000' ecx='0x00000000' edx='0x08000000'/>
+   <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000006'/>
+   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
+ </cpudata>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-guest.xml
+index 7b93df3f1b..7718d7ca59 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-guest.xml
+@@ -21,6 +21,7 @@
+   <feature policy='require' name='tsc_adjust'/>
+   <feature policy='require' name='cmt'/>
+   <feature policy='require' name='intel-pt'/>
++  <feature policy='require' name='stibp'/>
+   <feature policy='require' name='mbm_total'/>
+   <feature policy='require' name='mbm_local'/>
+   <feature policy='require' name='pdpe1gb'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-host.xml
+index 5078420c7a..43a0b93ab4 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-host.xml
+@@ -26,6 +26,7 @@
+   <feature name='tsc_adjust'/>
+   <feature name='cmt'/>
+   <feature name='intel-pt'/>
++  <feature name='stibp'/>
+   <feature name='xsaveopt'/>
+   <feature name='mbm_total'/>
+   <feature name='mbm_local'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-disabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-disabled.xml
+index b5c70a9dc4..a5b85a15c2 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-disabled.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-disabled.xml
+@@ -1,7 +1,7 @@
+ <!-- Features disabled by QEMU -->
+ <cpudata arch='x86'>
+   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0804c1fc' edx='0xb0600000'/>
+-  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00001000' ecx='0x00000008' edx='0x00000000'/>
++  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00001000' ecx='0x00000008' edx='0x08000000'/>
+   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+   <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000006'/>
+   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-guest.xml
+index 480127f341..8f014f6e28 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-guest.xml
+@@ -23,6 +23,7 @@
+   <feature policy='require' name='clflushopt'/>
+   <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='pku'/>
++  <feature policy='require' name='stibp'/>
+   <feature policy='require' name='xsaves'/>
+   <feature policy='require' name='mbm_total'/>
+   <feature policy='require' name='mbm_local'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-host.xml
+index 680b10acef..9de76fd640 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-host.xml
+@@ -24,6 +24,7 @@
+   <feature name='clflushopt'/>
+   <feature name='intel-pt'/>
+   <feature name='pku'/>
++  <feature name='stibp'/>
+   <feature name='xsaves'/>
+   <feature name='mbm_total'/>
+   <feature name='mbm_local'/>
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-cpu_map-Add-Icelake-CPU-models.patch b/SOURCES/libvirt-cpu_map-Add-Icelake-CPU-models.patch
new file mode 100644
index 0000000..e5b2285
--- /dev/null
+++ b/SOURCES/libvirt-cpu_map-Add-Icelake-CPU-models.patch
@@ -0,0 +1,219 @@
+From 08c5219ec08bf4383278e3de8e86768f5148f0e0 Mon Sep 17 00:00:00 2001
+Message-Id: <08c5219ec08bf4383278e3de8e86768f5148f0e0@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Wed, 29 Aug 2018 14:29:20 +0200
+Subject: [PATCH] cpu_map: Add Icelake CPU models
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Introduced in QEMU by commit v3.0.0-156-g8a11c62da9.
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 993d85ae5e2422a664ba5f700ed3bf7abd989cfc)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1526625
+
+Conflicts:
+        src/cpu_map/x86_Icelake-Client.xml
+        src/cpu_map/x86_Icelake-Server.xml
+            - cpu_map.xml is still monolithic in RHEL-8
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/cpu/cpu_map.xml | 178 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 178 insertions(+)
+
+diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
+index 4d19a7c811..cdb023e936 100644
+--- a/src/cpu/cpu_map.xml
++++ b/src/cpu/cpu_map.xml
+@@ -1955,6 +1955,184 @@
+       <feature name='xsaveopt'/>
+     </model>
+ 
++    <model name='Icelake-Client'>
++      <signature family='6' model='126'/>
++      <vendor name='Intel'/>
++      <feature name='3dnowprefetch'/>
++      <feature name='abm'/>
++      <feature name='adx'/>
++      <feature name='aes'/>
++      <feature name='apic'/>
++      <feature name='arat'/>
++      <feature name='avx'/>
++      <feature name='avx2'/>
++      <feature name='avx512-vpopcntdq'/>
++      <feature name='avx512bitalg'/>
++      <feature name='avx512vbmi'/>
++      <feature name='avx512vbmi2'/>
++      <feature name='avx512vnni'/>
++      <feature name='bmi1'/>
++      <feature name='bmi2'/>
++      <feature name='clflush'/>
++      <feature name='cmov'/>
++      <feature name='cx16'/>
++      <feature name='cx8'/>
++      <feature name='de'/>
++      <feature name='erms'/>
++      <feature name='f16c'/>
++      <feature name='fma'/>
++      <feature name='fpu'/>
++      <feature name='fsgsbase'/>
++      <feature name='fxsr'/>
++      <feature name='gfni'/>
++      <feature name='hle'/>
++      <feature name='intel-pt'/>
++      <feature name='invpcid'/>
++      <feature name='lahf_lm'/>
++      <feature name='lm'/>
++      <feature name='mca'/>
++      <feature name='mce'/>
++      <feature name='mmx'/>
++      <feature name='movbe'/>
++      <feature name='mpx'/>
++      <feature name='msr'/>
++      <feature name='mtrr'/>
++      <feature name='nx'/>
++      <!-- 'ospke' is a dynamic feature and cannot be enabled manually
++           see QEMU's commit 9ccb9784b57 for more details -->
++      <feature name='pae'/>
++      <feature name='pat'/>
++      <feature name='pcid'/>
++      <feature name='pclmuldq'/>
++      <feature name='pge'/>
++      <feature name='pku'/>
++      <feature name='pni'/>
++      <feature name='popcnt'/>
++      <feature name='pse'/>
++      <feature name='pse36'/>
++      <feature name='rdrand'/>
++      <feature name='rdseed'/>
++      <feature name='rdtscp'/>
++      <feature name='rtm'/>
++      <feature name='sep'/>
++      <feature name='smap'/>
++      <feature name='smep'/>
++      <feature name='spec-ctrl'/>
++      <feature name='ssbd'/>
++      <feature name='sse'/>
++      <feature name='sse2'/>
++      <feature name='sse4.1'/>
++      <feature name='sse4.2'/>
++      <feature name='ssse3'/>
++      <feature name='syscall'/>
++      <feature name='tsc'/>
++      <feature name='tsc-deadline'/>
++      <feature name='umip'/>
++      <feature name='vaes'/>
++      <feature name='vme'/>
++      <feature name='vpclmulqdq'/>
++      <feature name='wbnoinvd'/>
++      <feature name='x2apic'/>
++      <feature name='xgetbv1'/>
++      <feature name='xsave'/>
++      <feature name='xsavec'/>
++      <feature name='xsaveopt'/>
++    </model>
++
++    <model name='Icelake-Server'>
++      <signature family='6' model='134'/>
++      <vendor name='Intel'/>
++      <feature name='3dnowprefetch'/>
++      <feature name='abm'/>
++      <feature name='adx'/>
++      <feature name='aes'/>
++      <feature name='apic'/>
++      <feature name='arat'/>
++      <feature name='avx'/>
++      <feature name='avx2'/>
++      <feature name='avx512-vpopcntdq'/>
++      <feature name='avx512bitalg'/>
++      <feature name='avx512bw'/>
++      <feature name='avx512cd'/>
++      <feature name='avx512dq'/>
++      <feature name='avx512f'/>
++      <feature name='avx512vbmi'/>
++      <feature name='avx512vbmi2'/>
++      <feature name='avx512vl'/>
++      <feature name='avx512vnni'/>
++      <feature name='bmi1'/>
++      <feature name='bmi2'/>
++      <feature name='clflush'/>
++      <feature name='clflushopt'/>
++      <feature name='clwb'/>
++      <feature name='cmov'/>
++      <feature name='cx16'/>
++      <feature name='cx8'/>
++      <feature name='de'/>
++      <feature name='erms'/>
++      <feature name='f16c'/>
++      <feature name='fma'/>
++      <feature name='fpu'/>
++      <feature name='fsgsbase'/>
++      <feature name='fxsr'/>
++      <feature name='gfni'/>
++      <feature name='hle'/>
++      <feature name='intel-pt'/>
++      <feature name='invpcid'/>
++      <feature name='la57'/>
++      <feature name='lahf_lm'/>
++      <feature name='lm'/>
++      <feature name='mca'/>
++      <feature name='mce'/>
++      <feature name='mmx'/>
++      <feature name='movbe'/>
++      <feature name='mpx'/>
++      <feature name='msr'/>
++      <feature name='mtrr'/>
++      <feature name='nx'/>
++      <!-- 'ospke' is a dynamic feature and cannot be enabled manually
++           see QEMU's commit 9ccb9784b57 for more details -->
++      <feature name='pae'/>
++      <feature name='pat'/>
++      <feature name='pcid'/>
++      <feature name='pclmuldq'/>
++      <feature name='pconfig'/>
++      <feature name='pdpe1gb'/>
++      <feature name='pge'/>
++      <feature name='pku'/>
++      <feature name='pni'/>
++      <feature name='popcnt'/>
++      <feature name='pse'/>
++      <feature name='pse36'/>
++      <feature name='rdrand'/>
++      <feature name='rdseed'/>
++      <feature name='rdtscp'/>
++      <feature name='rtm'/>
++      <feature name='sep'/>
++      <feature name='smap'/>
++      <feature name='smep'/>
++      <feature name='spec-ctrl'/>
++      <feature name='ssbd'/>
++      <feature name='sse'/>
++      <feature name='sse2'/>
++      <feature name='sse4.1'/>
++      <feature name='sse4.2'/>
++      <feature name='ssse3'/>
++      <feature name='syscall'/>
++      <feature name='tsc'/>
++      <feature name='tsc-deadline'/>
++      <feature name='umip'/>
++      <feature name='vaes'/>
++      <feature name='vme'/>
++      <feature name='vpclmulqdq'/>
++      <feature name='wbnoinvd'/>
++      <feature name='x2apic'/>
++      <feature name='xgetbv1'/>
++      <feature name='xsave'/>
++      <feature name='xsavec'/>
++      <feature name='xsaveopt'/>
++    </model>
++
+     <!-- AMD CPUs -->
+     <model name='athlon'>
+       <vendor name='AMD'/>
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-cpu_map-Add-features-for-Icelake-CPUs.patch b/SOURCES/libvirt-cpu_map-Add-features-for-Icelake-CPUs.patch
new file mode 100644
index 0000000..482be75
--- /dev/null
+++ b/SOURCES/libvirt-cpu_map-Add-features-for-Icelake-CPUs.patch
@@ -0,0 +1,379 @@
+From fe47728e25c3e12ea5b22a07902bf19a4b3afb43 Mon Sep 17 00:00:00 2001
+Message-Id: <fe47728e25c3e12ea5b22a07902bf19a4b3afb43@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Wed, 29 Aug 2018 14:28:39 +0200
+Subject: [PATCH] cpu_map: Add features for Icelake CPUs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+QEMU commits:
+
+    e37a5c7fa4 (v2.12.0)
+        i386: Add Intel Processor Trace feature support
+
+    c2f193b538 (v2.7.0)
+        target-i386: Add support for UMIP and RDPID CPUID bits
+
+    aff9e6e46a (v2.12.0)
+        x86/cpu: Enable new SSE/AVX/AVX512 cpu features
+
+    f77543772d (v2.9.0)
+        x86: add AVX512_VPOPCNTDQ features
+
+    5131dc433d (v3.1.0)
+        i386: Add CPUID bit for PCONFIG
+
+    59a80a19ca (v3.1.0)
+        i386: Add CPUID bit for WBNOINVD
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 9813081119b6727c8b6067a783465addef06525e)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1526625
+https://bugzilla.redhat.com/show_bug.cgi?id=1527657
+
+Conflicts:
+	src/cpu_map/x86_features.xml
+            - cpu_map.xml is still monolithic in RHEL-8
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/cpu/cpu_map.xml                           | 33 +++++++++++++++++++
+ .../x86_64-cpuid-Core-i5-6600-guest.xml       |  1 +
+ .../x86_64-cpuid-Core-i5-6600-host.xml        |  1 +
+ .../x86_64-cpuid-Core-i7-5600U-arat-guest.xml |  1 +
+ .../x86_64-cpuid-Core-i7-5600U-arat-host.xml  |  1 +
+ .../x86_64-cpuid-Core-i7-5600U-guest.xml      |  1 +
+ .../x86_64-cpuid-Core-i7-5600U-host.xml       |  1 +
+ .../x86_64-cpuid-Core-i7-5600U-ibrs-guest.xml |  1 +
+ .../x86_64-cpuid-Core-i7-5600U-ibrs-host.xml  |  1 +
+ .../x86_64-cpuid-Core-i7-7700-guest.xml       |  1 +
+ .../x86_64-cpuid-Core-i7-7700-host.xml        |  1 +
+ .../x86_64-cpuid-Xeon-E3-1245-v5-guest.xml    |  1 +
+ .../x86_64-cpuid-Xeon-E3-1245-v5-host.xml     |  1 +
+ .../x86_64-cpuid-Xeon-E5-2623-v4-guest.xml    |  1 +
+ .../x86_64-cpuid-Xeon-E5-2623-v4-host.xml     |  1 +
+ .../x86_64-cpuid-Xeon-E5-2650-v4-guest.xml    |  1 +
+ .../x86_64-cpuid-Xeon-E5-2650-v4-host.xml     |  1 +
+ .../x86_64-cpuid-Xeon-Gold-5115-guest.xml     |  1 +
+ .../x86_64-cpuid-Xeon-Gold-5115-host.xml      |  1 +
+ .../x86_64-cpuid-Xeon-Gold-6148-guest.xml     |  1 +
+ .../x86_64-cpuid-Xeon-Gold-6148-host.xml      |  1 +
+ 21 files changed, 53 insertions(+)
+
+diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
+index 96daa0f9af..4d19a7c811 100644
+--- a/src/cpu/cpu_map.xml
++++ b/src/cpu/cpu_map.xml
+@@ -257,6 +257,9 @@
+     <feature name='clwb'>
+       <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x01000000'/>
+     </feature>
++    <feature name='intel-pt'>
++      <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x02000000'/>
++    </feature>
+     <feature name='avx512pf'>
+       <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x04000000'/>
+     </feature>
+@@ -279,12 +282,36 @@
+     <feature name='avx512vbmi'>
+       <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000002'/>
+     </feature>
++    <feature name='umip'>
++      <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000004'/>
++    </feature>
+     <feature name='pku'>
+       <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000008'/>
+     </feature>
+     <feature name='ospke'>
+       <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000010'/>
+     </feature>
++    <feature name='avx512vbmi2'>
++      <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000040'/>
++    </feature>
++    <feature name='gfni'>
++      <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000100'/>
++    </feature>
++    <feature name='vaes'>
++      <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000200'/>
++    </feature>
++    <feature name='vpclmulqdq'>
++      <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000400'/>
++    </feature>
++    <feature name='avx512vnni'>
++      <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000800'/>
++    </feature>
++    <feature name='avx512bitalg'>
++      <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00001000'/>
++    </feature>
++    <feature name='avx512-vpopcntdq'>
++      <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00004000'/>
++    </feature>
+     <feature name='la57'>
+       <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00010000'/>
+     </feature>
+@@ -295,6 +322,9 @@
+     <feature name='avx512-4fmaps'>
+       <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000008'/>
+     </feature>
++    <feature name='pconfig'>
++      <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00040000'/>
++    </feature>
+     <feature name='spec-ctrl'>
+       <cpuid eax_in='0x07' ecx_in='0x00' edx='0x04000000'/>
+     </feature>
+@@ -430,6 +460,9 @@
+     </feature>
+ 
+     <!-- More AMD-specific features -->
++    <feature name='wbnoinvd'>
++      <cpuid eax_in='0x80000008' ebx='0x00000200'/>
++    </feature>
+     <feature name='ibpb'>
+       <cpuid eax_in='0x80000008' ebx='0x00001000'/>
+     </feature>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-6600-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-6600-guest.xml
+index c3561d5971..5777a0bfba 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i5-6600-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i5-6600-guest.xml
+@@ -19,6 +19,7 @@
+   <feature policy='require' name='osxsave'/>
+   <feature policy='require' name='tsc_adjust'/>
+   <feature policy='require' name='clflushopt'/>
++  <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='xsaves'/>
+   <feature policy='require' name='pdpe1gb'/>
+   <feature policy='require' name='invtsc'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-6600-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-6600-host.xml
+index c799394eaf..faaa07f19b 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i5-6600-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i5-6600-host.xml
+@@ -20,6 +20,7 @@
+   <feature name='osxsave'/>
+   <feature name='tsc_adjust'/>
+   <feature name='clflushopt'/>
++  <feature name='intel-pt'/>
+   <feature name='xsaves'/>
+   <feature name='pdpe1gb'/>
+   <feature name='invtsc'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-arat-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-arat-guest.xml
+index 877895cf15..e825e2a0fb 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-arat-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-arat-guest.xml
+@@ -22,6 +22,7 @@
+   <feature policy='require' name='rdrand'/>
+   <feature policy='require' name='arat'/>
+   <feature policy='require' name='tsc_adjust'/>
++  <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='xsaveopt'/>
+   <feature policy='require' name='pdpe1gb'/>
+   <feature policy='require' name='abm'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-arat-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-arat-host.xml
+index 9b24941e0e..ea622c87c7 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-arat-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-arat-host.xml
+@@ -23,6 +23,7 @@
+   <feature name='rdrand'/>
+   <feature name='arat'/>
+   <feature name='tsc_adjust'/>
++  <feature name='intel-pt'/>
+   <feature name='xsaveopt'/>
+   <feature name='pdpe1gb'/>
+   <feature name='abm'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-guest.xml
+index 877895cf15..e825e2a0fb 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-guest.xml
+@@ -22,6 +22,7 @@
+   <feature policy='require' name='rdrand'/>
+   <feature policy='require' name='arat'/>
+   <feature policy='require' name='tsc_adjust'/>
++  <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='xsaveopt'/>
+   <feature policy='require' name='pdpe1gb'/>
+   <feature policy='require' name='abm'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-host.xml
+index 9b24941e0e..ea622c87c7 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-host.xml
+@@ -23,6 +23,7 @@
+   <feature name='rdrand'/>
+   <feature name='arat'/>
+   <feature name='tsc_adjust'/>
++  <feature name='intel-pt'/>
+   <feature name='xsaveopt'/>
+   <feature name='pdpe1gb'/>
+   <feature name='abm'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-guest.xml
+index a70cb6d46a..4fa4770208 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-guest.xml
+@@ -22,6 +22,7 @@
+   <feature policy='require' name='rdrand'/>
+   <feature policy='require' name='arat'/>
+   <feature policy='require' name='tsc_adjust'/>
++  <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='xsaveopt'/>
+   <feature policy='require' name='pdpe1gb'/>
+   <feature policy='require' name='abm'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-host.xml
+index b8e3399103..25690c099c 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs-host.xml
+@@ -23,6 +23,7 @@
+   <feature name='rdrand'/>
+   <feature name='arat'/>
+   <feature name='tsc_adjust'/>
++  <feature name='intel-pt'/>
+   <feature name='xsaveopt'/>
+   <feature name='pdpe1gb'/>
+   <feature name='abm'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-7700-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-7700-guest.xml
+index c3561d5971..5777a0bfba 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-7700-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-7700-guest.xml
+@@ -19,6 +19,7 @@
+   <feature policy='require' name='osxsave'/>
+   <feature policy='require' name='tsc_adjust'/>
+   <feature policy='require' name='clflushopt'/>
++  <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='xsaves'/>
+   <feature policy='require' name='pdpe1gb'/>
+   <feature policy='require' name='invtsc'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-7700-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-7700-host.xml
+index c799394eaf..faaa07f19b 100644
+--- a/tests/cputestdata/x86_64-cpuid-Core-i7-7700-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Core-i7-7700-host.xml
+@@ -20,6 +20,7 @@
+   <feature name='osxsave'/>
+   <feature name='tsc_adjust'/>
+   <feature name='clflushopt'/>
++  <feature name='intel-pt'/>
+   <feature name='xsaves'/>
+   <feature name='pdpe1gb'/>
+   <feature name='invtsc'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-v5-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-v5-guest.xml
+index c3561d5971..5777a0bfba 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-v5-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-v5-guest.xml
+@@ -19,6 +19,7 @@
+   <feature policy='require' name='osxsave'/>
+   <feature policy='require' name='tsc_adjust'/>
+   <feature policy='require' name='clflushopt'/>
++  <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='xsaves'/>
+   <feature policy='require' name='pdpe1gb'/>
+   <feature policy='require' name='invtsc'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-v5-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-v5-host.xml
+index c799394eaf..faaa07f19b 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-v5-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-v5-host.xml
+@@ -20,6 +20,7 @@
+   <feature name='osxsave'/>
+   <feature name='tsc_adjust'/>
+   <feature name='clflushopt'/>
++  <feature name='intel-pt'/>
+   <feature name='xsaves'/>
+   <feature name='pdpe1gb'/>
+   <feature name='invtsc'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-guest.xml
+index 60609f5c70..7b93df3f1b 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-guest.xml
+@@ -20,6 +20,7 @@
+   <feature policy='require' name='osxsave'/>
+   <feature policy='require' name='tsc_adjust'/>
+   <feature policy='require' name='cmt'/>
++  <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='mbm_total'/>
+   <feature policy='require' name='mbm_local'/>
+   <feature policy='require' name='pdpe1gb'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-host.xml
+index 357cafd10a..5078420c7a 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4-host.xml
+@@ -25,6 +25,7 @@
+   <feature name='arat'/>
+   <feature name='tsc_adjust'/>
+   <feature name='cmt'/>
++  <feature name='intel-pt'/>
+   <feature name='xsaveopt'/>
+   <feature name='mbm_total'/>
+   <feature name='mbm_local'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-v4-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-v4-guest.xml
+index 2fac54355c..cd7e25b52a 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-v4-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-v4-guest.xml
+@@ -20,6 +20,7 @@
+   <feature policy='require' name='osxsave'/>
+   <feature policy='require' name='tsc_adjust'/>
+   <feature policy='require' name='cmt'/>
++  <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='mbm_total'/>
+   <feature policy='require' name='mbm_local'/>
+   <feature policy='require' name='pdpe1gb'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-v4-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-v4-host.xml
+index f482864a98..5dd8d749de 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-v4-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-v4-host.xml
+@@ -25,6 +25,7 @@
+   <feature name='arat'/>
+   <feature name='tsc_adjust'/>
+   <feature name='cmt'/>
++  <feature name='intel-pt'/>
+   <feature name='xsaveopt'/>
+   <feature name='mbm_total'/>
+   <feature name='mbm_local'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-guest.xml
+index 5f51dea631..480127f341 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-guest.xml
+@@ -21,6 +21,7 @@
+   <feature policy='require' name='tsc_adjust'/>
+   <feature policy='require' name='cmt'/>
+   <feature policy='require' name='clflushopt'/>
++  <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='pku'/>
+   <feature policy='require' name='xsaves'/>
+   <feature policy='require' name='mbm_total'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-host.xml
+index a11b31369d..680b10acef 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115-host.xml
+@@ -22,6 +22,7 @@
+   <feature name='tsc_adjust'/>
+   <feature name='cmt'/>
+   <feature name='clflushopt'/>
++  <feature name='intel-pt'/>
+   <feature name='pku'/>
+   <feature name='xsaves'/>
+   <feature name='mbm_total'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6148-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6148-guest.xml
+index f72bcea68b..f31ca1ffc5 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6148-guest.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6148-guest.xml
+@@ -21,6 +21,7 @@
+   <feature policy='require' name='tsc_adjust'/>
+   <feature policy='require' name='cmt'/>
+   <feature policy='require' name='clflushopt'/>
++  <feature policy='require' name='intel-pt'/>
+   <feature policy='require' name='pku'/>
+   <feature policy='require' name='xsaves'/>
+   <feature policy='require' name='mbm_total'/>
+diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6148-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6148-host.xml
+index 1a68e35c19..b18ceddc60 100644
+--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6148-host.xml
++++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6148-host.xml
+@@ -22,6 +22,7 @@
+   <feature name='tsc_adjust'/>
+   <feature name='cmt'/>
+   <feature name='clflushopt'/>
++  <feature name='intel-pt'/>
+   <feature name='pku'/>
+   <feature name='xsaves'/>
+   <feature name='mbm_total'/>
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-docs-Drop-dev-net-tun-from-the-list-of-shared-devices.patch b/SOURCES/libvirt-docs-Drop-dev-net-tun-from-the-list-of-shared-devices.patch
new file mode 100644
index 0000000..fdb0fee
--- /dev/null
+++ b/SOURCES/libvirt-docs-Drop-dev-net-tun-from-the-list-of-shared-devices.patch
@@ -0,0 +1,39 @@
+From 7194b00ad873e4b0c8b6b69fac840ae56bda1e91 Mon Sep 17 00:00:00 2001
+Message-Id: <7194b00ad873e4b0c8b6b69fac840ae56bda1e91@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Fri, 1 Feb 2019 17:21:53 +0100
+Subject: [PATCH] docs: Drop /dev/net/tun from the list of shared devices
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This was a left-over that should have been dropped along the change in
+qemu.conf.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 13500ee28922077010481305b5b55851f310d477)
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1665400
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/drvqemu.html.in | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/docs/drvqemu.html.in b/docs/drvqemu.html.in
+index 13adb5c22b..d51ccf2412 100644
+--- a/docs/drvqemu.html.in
++++ b/docs/drvqemu.html.in
+@@ -396,8 +396,7 @@ chmod o+x /path/to/directory
+ /dev/null, /dev/full, /dev/zero,
+ /dev/random, /dev/urandom,
+ /dev/ptmx, /dev/kvm, /dev/kqemu,
+-/dev/rtc, /dev/hpet, /dev/net/tun,
+-/dev/sev
++/dev/rtc, /dev/hpet, /dev/sev
+ </pre>
+ 
+     <p>
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-docs-Enhance-polkit-documentation-to-describe-secondary-connection.patch b/SOURCES/libvirt-docs-Enhance-polkit-documentation-to-describe-secondary-connection.patch
new file mode 100644
index 0000000..50692d6
--- /dev/null
+++ b/SOURCES/libvirt-docs-Enhance-polkit-documentation-to-describe-secondary-connection.patch
@@ -0,0 +1,173 @@
+From 075028e74f4d11c8b0d3bb3e857e4811b148a4e1 Mon Sep 17 00:00:00 2001
+Message-Id: <075028e74f4d11c8b0d3bb3e857e4811b148a4e1@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Mon, 5 Nov 2018 07:48:38 -0500
+Subject: [PATCH] docs: Enhance polkit documentation to describe secondary
+ connection
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1631608 (RHEL 8.0)
+https://bugzilla.redhat.com/show_bug.cgi?id=1631606 (RHEL 7.7)
+
+Since commit 8259255 usage of a primary connection driver for
+a virConnect has been modified to open (virConnectOpen) and use
+a connection to the specific driver in order to handle the API
+calls to/for that driver. This causes some confusion and issues
+for ACL polkit rule scripts to know exactly which driver by
+name will be used.
+
+Add some documentation describing the processing of the primary
+and secondary connection as well as the list of the connect_driver
+names used for each driver.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+ACKed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 4f1107614dc1384c4aa7a5582a16aecba8b9310f)
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ docs/aclpolkit.html.in | 117 +++++++++++++++++++++++++++++++++++++++++
+ docs/libvirt.css       |   1 +
+ 2 files changed, 118 insertions(+)
+
+diff --git a/docs/aclpolkit.html.in b/docs/aclpolkit.html.in
+index ee00b98461..ac54f125da 100644
+--- a/docs/aclpolkit.html.in
++++ b/docs/aclpolkit.html.in
+@@ -287,6 +287,123 @@
+       </tbody>
+     </table>
+ 
++    <h2><a id="connect_driver">Hypervisor Driver connect_driver</a></h2>
++    <p>
++      The <code>connect_driver</code> parameter describes the
++      client's <a href="remote.html">remote Connection Driver</a>
++      name based on the <a href="uri.html">URI</a> used for the
++      connection.
++    </p>
++    <p>
++      <span class="since">Since 4.1.0</span>, when calling an API
++      outside the scope of the primary connection driver, the
++      primary driver will attempt to open a secondary connection
++      to the specific API driver in order to process the API. For
++      example, when hypervisor domain processing needs to make an
++      API call within the storage driver or the network filter driver
++      an attempt to open a connection to the "storage" or "nwfilter"
++      driver will be made. Similarly, a "storage" primary connection
++      may need to create a connection to the "secret" driver in order
++      to process secrets for the API. If successful, then calls to
++      those API's will occur in the <code>connect_driver</code> context
++      of the secondary connection driver rather than in the context of
++      the primary driver. This affects the <code>connect_driver</code>
++      returned from rule generation from the <code>action.loookup</code>
++      function. The following table provides a list of the various
++      connection drivers and the <code>connect_driver</code> name
++      used by each regardless of primary or secondary connection.
++      The access denied error message from libvirt will list the
++      connection driver by name that denied the access.
++    </p>
++
++    <h3><a id="object_connect_driver">Connection Driver Name</a></h3>
++    <table class="acl">
++      <thead>
++        <tr>
++          <th>Connection Driver</th>
++          <th><code>connect_driver</code> name</th>
++        </tr>
++      </thead>
++      <tbody>
++        <tr>
++          <td>bhyve</td>
++          <td>bhyve</td>
++        </tr>
++        <tr>
++          <td>esx</td>
++          <td>ESX</td>
++        </tr>
++        <tr>
++          <td>hyperv</td>
++          <td>Hyper-V</td>
++        </tr>
++        <tr>
++          <td>interface</td>
++          <td>interface</td>
++        </tr>
++        <tr>
++          <td>libxl</td>
++          <td>xenlight</td>
++        </tr>
++        <tr>
++          <td>lxc</td>
++          <td>LXC</td>
++        </tr>
++        <tr>
++          <td>network</td>
++          <td>network</td>
++        </tr>
++        <tr>
++          <td>nodedev</td>
++          <td>nodedev</td>
++        </tr>
++        <tr>
++          <td>nwfilter</td>
++          <td>NWFilter</td>
++        </tr>
++        <tr>
++          <td>openvz</td>
++          <td>OPENVZ</td>
++        </tr>
++        <tr>
++          <td>phyp</td>
++          <td>PHYP</td>
++        </tr>
++        <tr>
++          <td>qemu</td>
++          <td>QEMU</td>
++        </tr>
++        <tr>
++          <td>secret</td>
++          <td>secret</td>
++        </tr>
++        <tr>
++          <td>storage</td>
++          <td>storage</td>
++        </tr>
++        <tr>
++          <td>uml</td>
++          <td>UML</td>
++        </tr>
++        <tr>
++          <td>vbox</td>
++          <td>VBOX</td>
++        </tr>
++        <tr>
++          <td>vmware</td>
++          <td>VMWARE</td>
++        </tr>
++        <tr>
++          <td>vz</td>
++          <td>vz</td>
++        </tr>
++        <tr>
++          <td>xenapi</td>
++          <td>XenAPI</td>
++        </tr>
++      </tbody>
++    </table>
++
+ 
+     <h2><a id="user">User identity attributes</a></h2>
+ 
+diff --git a/docs/libvirt.css b/docs/libvirt.css
+index b2ed33926a..e590b33cfb 100644
+--- a/docs/libvirt.css
++++ b/docs/libvirt.css
+@@ -393,6 +393,7 @@ table.acl {
+ 
+ table.acl tr, table.acl td {
+     padding: 0.3em;
++    border: 1px solid #ccc;
+ }
+ 
+ table.acl thead {
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-docs-Rephrase-the-mediated-devices-hostdev-section-a-bit.patch b/SOURCES/libvirt-docs-Rephrase-the-mediated-devices-hostdev-section-a-bit.patch
new file mode 100644
index 0000000..7b833a8
--- /dev/null
+++ b/SOURCES/libvirt-docs-Rephrase-the-mediated-devices-hostdev-section-a-bit.patch
@@ -0,0 +1,44 @@
+From 504df691c5175e21a379cb340e88556d2b6cc508 Mon Sep 17 00:00:00 2001
+Message-Id: <504df691c5175e21a379cb340e88556d2b6cc508@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:04:04 +0200
+Subject: [PATCH] docs: Rephrase the mediated devices hostdev section a bit
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Currently it reads:
+Refer MDEV to create a mediated device on the host
+
+...even though it resembles English, it's not a proper English.
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 32b52ed838dd393b4249ddcb9d4b17f1deafbc2b)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/formatdomain.html.in | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index 3554c3dc30..0e8f0a125f 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -4509,8 +4509,9 @@
+           determines how the host's vfio driver will expose the device to the
+           guest. Currently, <code>model='vfio-pci'</code> and
+           <code>model='vfio-ccw'</code> (<span class="since">Since 4.4.0</span>)
+-          is supported. Refer <a href="drvnodedev.html#MDEV">MDEV</a> to create
+-          a mediated device on the host.
++          is supported. <a href="drvnodedev.html#MDEV">MDEV</a> section
++          provides more information about mediated devices as well as how to
++          create mediated devices on the host.
+           <span class="since">Since 4.6.0 (QEMU 2.12)</span> an optional
+           <code>display</code> attribute may be used to enable or disable
+           support for an accelerated remote desktop backed by a mediated
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-docs-schema-Add-missing-alias-to-vsock-device.patch b/SOURCES/libvirt-docs-schema-Add-missing-alias-to-vsock-device.patch
new file mode 100644
index 0000000..c620434
--- /dev/null
+++ b/SOURCES/libvirt-docs-schema-Add-missing-alias-to-vsock-device.patch
@@ -0,0 +1,39 @@
+From a998757a131ac8ee6db448bd9806efa4b3a0b11b Mon Sep 17 00:00:00 2001
+Message-Id: <a998757a131ac8ee6db448bd9806efa4b3a0b11b@dist-git>
+From: Han Han <hhan@redhat.com>
+Date: Fri, 13 Jul 2018 13:08:27 +0200
+Subject: [PATCH] docs: schema: Add missing <alias> to vsock device
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1600345
+
+Signed-off-by: Han Han <hhan@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit c03d36b91d62890b376a2ff8f9d65fac069dce42)
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1600345
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/schemas/domaincommon.rng | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index bd687ce9d3..f24a56392a 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -4234,6 +4234,9 @@
+         <optional>
+           <ref name="address"/>
+         </optional>
++        <optional>
++          <ref name="alias"/>
++        </optional>
+       </interleave>
+     </element>
+   </define>
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-domain_nwfilter-Return-early-if-net-has-no-name-in-virDomainConfNWFilterTeardownImpl.patch b/SOURCES/libvirt-domain_nwfilter-Return-early-if-net-has-no-name-in-virDomainConfNWFilterTeardownImpl.patch
new file mode 100644
index 0000000..071f0a4
--- /dev/null
+++ b/SOURCES/libvirt-domain_nwfilter-Return-early-if-net-has-no-name-in-virDomainConfNWFilterTeardownImpl.patch
@@ -0,0 +1,46 @@
+From 9996e3dd0e17e3019881e097bc38ac25527cddb1 Mon Sep 17 00:00:00 2001
+Message-Id: <9996e3dd0e17e3019881e097bc38ac25527cddb1@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 25 Jul 2018 13:52:55 +0200
+Subject: [PATCH] domain_nwfilter: Return early if net has no name in
+ virDomainConfNWFilterTeardownImpl
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1607831
+
+This function is called from various clean up paths (e.g.
+from qemuBuildInterfaceCommandLine). However, depending on the
+stage the interface creation process failed at, net->ifname might
+still be not filled in when control jumps to cleanup label. If
+that is the case return early (avoiding useless error message
+produced in virNWFilterBindingLookupByPortDev) as there is no
+NWFilter to tear down anyway.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 3087b27cffdd46ad0e953e061d6f3c519aefd5d8)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_nwfilter.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/conf/domain_nwfilter.c b/src/conf/domain_nwfilter.c
+index 24b5f42ddd..f39c8a1f9b 100644
+--- a/src/conf/domain_nwfilter.c
++++ b/src/conf/domain_nwfilter.c
+@@ -133,6 +133,9 @@ virDomainConfNWFilterTeardownImpl(virConnectPtr conn,
+ {
+     virNWFilterBindingPtr binding;
+ 
++    if (!net->ifname)
++        return;
++
+     binding = virNWFilterBindingLookupByPortDev(conn, net->ifname);
+     if (!binding)
+         return;
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-esx-storage-Fix-typo-lsilogic-lsiLogic.patch b/SOURCES/libvirt-esx-storage-Fix-typo-lsilogic-lsiLogic.patch
new file mode 100644
index 0000000..a03c66f
--- /dev/null
+++ b/SOURCES/libvirt-esx-storage-Fix-typo-lsilogic-lsiLogic.patch
@@ -0,0 +1,42 @@
+From 19a946157484d0c2e3af38b46401114664da3b48 Mon Sep 17 00:00:00 2001
+Message-Id: <19a946157484d0c2e3af38b46401114664da3b48@dist-git>
+From: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
+Date: Wed, 25 Jul 2018 13:33:50 +0200
+Subject: [PATCH] esx storage: Fix typo lsilogic -> lsiLogic
+
+Commit 77298458d027db4d3e082213355e2d792f65158d changed the esx storage
+adapter from busLogic to lsilogic, introducing a typo. Changing it back
+to lsiLogic (with capital L) solves the issue. With this change, libvirt can now
+create volumes in ESX again.
+
+Thanks to Jaroslav Suchanek who figured out what was the issue in the
+first place.
+
+Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1571759
+Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
+(cherry picked from commit a1450d774f9412b6589418bf8bcafd12690d098a)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+---
+ src/esx/esx_storage_backend_vmfs.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/esx/esx_storage_backend_vmfs.c b/src/esx/esx_storage_backend_vmfs.c
+index 630a6aa8c9..bb2de4b69f 100644
+--- a/src/esx/esx_storage_backend_vmfs.c
++++ b/src/esx/esx_storage_backend_vmfs.c
+@@ -967,9 +967,9 @@ esxStorageVolCreateXML(virStoragePoolPtr pool,
+         /*
+          * FIXME: The adapter type is a required parameter, but there is no
+          * way to let the user specify it in the volume XML config. Therefore,
+-         * default to 'lsilogic' here.
++         * default to 'lsiLogic' here.
+          */
+-        virtualDiskSpec->adapterType = (char *)"lsilogic";
++        virtualDiskSpec->adapterType = (char *)"lsiLogic";
+ 
+         virtualDiskSpec->capacityKb->value =
+           VIR_DIV_UP(def->target.capacity, 1024); /* Scale from byte to kilobyte */
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-examples-Add-clean-traffic-gateway-into-nwfilters.patch b/SOURCES/libvirt-examples-Add-clean-traffic-gateway-into-nwfilters.patch
new file mode 100644
index 0000000..2a22fcc
--- /dev/null
+++ b/SOURCES/libvirt-examples-Add-clean-traffic-gateway-into-nwfilters.patch
@@ -0,0 +1,77 @@
+From 8eb23363ec3f89792c638c72832ff99ae5ec8169 Mon Sep 17 00:00:00 2001
+Message-Id: <8eb23363ec3f89792c638c72832ff99ae5ec8169@dist-git>
+From: Ales Musil <amusil@redhat.com>
+Date: Sun, 29 Jul 2018 16:56:18 +0200
+Subject: [PATCH] examples: Add clean-traffic-gateway into nwfilters
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The filter purpose is to simulate isolated private VLAN.
+
+The behavior can be achieved by limiting network traffic
+to traffic between VM and gateway. Because there is no
+concept of the PVLAN in the linux bridge.
+
+The filter also contains parts from clean-traffic
+to prevent VM from spoofing its IP and MAC address.
+
+To use this filter the user just needs to set
+the GATEWAY_MAC variable to gateway MAC address.
+
+Signed-off-by: Ales Musil <amusil@redhat.com>
+Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
+(cherry picked from commit ac01fbc90b7eb4ccc7a6140d618d1a3859365155)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1603115
+
+Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ .../xml/nwfilter/clean-traffic-gateway.xml    | 34 +++++++++++++++++++
+ 1 file changed, 34 insertions(+)
+ create mode 100644 examples/xml/nwfilter/clean-traffic-gateway.xml
+
+diff --git a/examples/xml/nwfilter/clean-traffic-gateway.xml b/examples/xml/nwfilter/clean-traffic-gateway.xml
+new file mode 100644
+index 0000000000..b8c204041a
+--- /dev/null
++++ b/examples/xml/nwfilter/clean-traffic-gateway.xml
+@@ -0,0 +1,34 @@
++<filter name='clean-traffic-gateway'>
++    <!-- An example of a traffic filter enforcing clean traffic
++            from a VM by
++              - preventing MAC spoofing -->
++    <filterref filter='no-mac-spoofing'/>
++
++    <!-- preventing IP spoofing on outgoing -->
++    <filterref filter='no-ip-spoofing'/>
++
++    <!-- preventing ARP spoofing/poisoning -->
++    <filterref filter='no-arp-spoofing'/>
++
++    <!-- accept all other incoming and outgoing ARP traffic -->
++    <rule action='accept' direction='inout' priority='-500'>
++        <mac protocolid='arp'/>
++    </rule>
++
++    <!-- accept traffic only from specified MAC address -->
++    <rule action='accept' direction='in'>
++        <mac match='yes' srcmacaddr='$GATEWAY_MAC'/>
++    </rule>
++
++    <!-- allow traffic only to specified MAC address -->
++    <rule action='accept' direction='out'>
++        <mac match='yes' dstmacaddr='$GATEWAY_MAC'/>
++    </rule>
++
++    <!-- preventing any other traffic than between specified MACs
++    and ARP -->
++    <filterref filter='no-other-l2-traffic'/>
++
++    <!-- allow qemu to send a self-announce upon migration end -->
++    <filterref filter='qemu-announce-self'/>
++</filter>
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-network-allow-configuring-firewalld-zone-for-virtual-network-bridge-device.patch b/SOURCES/libvirt-network-allow-configuring-firewalld-zone-for-virtual-network-bridge-device.patch
new file mode 100644
index 0000000..be208e1
--- /dev/null
+++ b/SOURCES/libvirt-network-allow-configuring-firewalld-zone-for-virtual-network-bridge-device.patch
@@ -0,0 +1,332 @@
+From 69de85ec80efd714528955e9c0ab67ee6811c824 Mon Sep 17 00:00:00 2001
+Message-Id: <69de85ec80efd714528955e9c0ab67ee6811c824@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Fri, 1 Feb 2019 20:29:32 -0500
+Subject: [PATCH] network: allow configuring firewalld zone for virtual network
+ bridge device
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since we're setting the zone anyway, it will be useful to allow
+setting a different (custom) zone for each network. This will be done
+by adding a "zone" attribute to the "bridge" element, e.g.:
+
+   ...
+   <bridge name='virbr0' zone='myzone'/>
+   ...
+
+If a zone is specified in the config and it can't be honored, this
+will be an error.
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 30a6f9168634f8ce269f1ef294c4a18d9c95939c)
+
+Conflicts:
+
+   src/conf/network_conf.c - upstream added a new bool called
+     hasBridge that is the equivalent of all the comparisons in the
+     if() just following the line that adds "zone='blah'" to the xml
+     string.
+
+https://bugzilla.redhat.com/1650320
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/firewall.html.in                      |  5 ++
+ docs/formatnetwork.html.in                 | 17 ++++
+ docs/schemas/basictypes.rng                |  6 ++
+ docs/schemas/network.rng                   |  6 ++
+ src/conf/network_conf.c                    | 14 +++-
+ src/conf/network_conf.h                    |  1 +
+ src/network/bridge_driver_linux.c          | 95 +++++++++++++---------
+ tests/networkxml2xmlin/routed-network.xml  |  2 +-
+ tests/networkxml2xmlout/routed-network.xml |  2 +-
+ 9 files changed, 106 insertions(+), 42 deletions(-)
+
+diff --git a/docs/firewall.html.in b/docs/firewall.html.in
+index 5d584e582e..e86ab0d974 100644
+--- a/docs/firewall.html.in
++++ b/docs/firewall.html.in
+@@ -151,6 +151,11 @@ MASQUERADE all  --  *      *       192.168.122.0/24    !192.168.122.0/24</pre>
+       iptables rules regardless of which backend is in use by
+       firewalld.
+     </p>
++    <p>
++      NB: It is possible to manually set the firewalld zone for a
++      network's interface with the "zone" attribute of the network's
++      "bridge" element.
++    </p>
+     <p>
+       NB: Prior to libvirt 5.1.0, the firewalld "libvirt" zone did not
+       exist, and prior to firewalld 0.7.0 a feature crucial to making
+diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in
+index 363a72bbc9..7ddcfee127 100644
+--- a/docs/formatnetwork.html.in
++++ b/docs/formatnetwork.html.in
+@@ -152,6 +152,23 @@
+           <span class="since">Since 1.2.11, requires kernel 3.17 or
+           newer</span>
+         </p>
++
++        <p>
++          The optional <code>zone</code> attribute of
++          the <code>bridge</code> element is used to specify
++          the <a href="https://firewalld.org">firewalld</a>
++          zone for the bridge of a network with <code>forward</code>
++          mode of "nat", "route", "open", or one with
++          no <code>forward</code> specified. By default, the bridges
++          of all virtual networks with these forward modes are placed
++          in the firewalld zone named "libvirt", which permits
++          incoming DNS, DHCP, TFTP, and SSH to the host from guests on
++          the network. This behavior can be changed either by
++          modifying the libvirt zone (using firewalld management
++          tools), or by placing the network in a different zone (which
++          will also be managed using firewalld tools).
++          <span class="since">Since 5.1.0</span>
++        </p>
+       </dd>
+ 
+       <dt><code>mtu</code></dt>
+diff --git a/docs/schemas/basictypes.rng b/docs/schemas/basictypes.rng
+index 1a18cd31b1..b45a7fcdc8 100644
+--- a/docs/schemas/basictypes.rng
++++ b/docs/schemas/basictypes.rng
+@@ -252,6 +252,12 @@
+     </data>
+   </define>
+ 
++  <define name="zoneName">
++    <data type="string">
++      <param name="pattern">[a-zA-Z0-9_\-]+</param>
++    </data>
++  </define>
++
+   <define name="filePath">
+     <data type="string">
+       <param name="pattern">.+</param>
+diff --git a/docs/schemas/network.rng b/docs/schemas/network.rng
+index f37c422bf3..2a6e3358fd 100644
+--- a/docs/schemas/network.rng
++++ b/docs/schemas/network.rng
+@@ -58,6 +58,12 @@
+               </attribute>
+             </optional>
+ 
++            <optional>
++              <attribute name="zone">
++                <ref name="zoneName"/>
++              </attribute>
++            </optional>
++
+             <optional>
+               <attribute name="stp">
+                 <ref name="virOnOff"/>
+diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
+index 630a87fc07..1e3650b70f 100644
+--- a/src/conf/network_conf.c
++++ b/src/conf/network_conf.c
+@@ -206,6 +206,7 @@ virNetworkDefFree(virNetworkDefPtr def)
+ 
+     VIR_FREE(def->name);
+     VIR_FREE(def->bridge);
++    VIR_FREE(def->bridgeZone);
+     VIR_FREE(def->domain);
+ 
+     virNetworkForwardDefClear(&def->forward);
+@@ -1689,6 +1690,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
+ 
+     /* Parse bridge information */
+     def->bridge = virXPathString("string(./bridge[1]/@name)", ctxt);
++    def->bridgeZone = virXPathString("string(./bridge[1]/@zone)", ctxt);
+     stp = virXPathString("string(./bridge[1]/@stp)", ctxt);
+     def->stp = (stp && STREQ(stp, "off")) ? false : true;
+ 
+@@ -1925,6 +1927,13 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
+                            def->name);
+             goto error;
+         }
++        if (def->bridgeZone) {
++            virReportError(VIR_ERR_XML_ERROR,
++                           _("bridge zone not allowed in %s mode (network '%s')"),
++                           virNetworkForwardTypeToString(def->forward.type),
++                           def->name);
++            goto error;
++        }
+         if (def->macTableManager) {
+             virReportError(VIR_ERR_XML_ERROR,
+                            _("bridge macTableManager setting not allowed "
+@@ -1936,9 +1945,9 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
+         ATTRIBUTE_FALLTHROUGH;
+ 
+     case VIR_NETWORK_FORWARD_BRIDGE:
+-        if (def->delay || stp) {
++        if (def->delay || stp || def->bridgeZone) {
+             virReportError(VIR_ERR_XML_ERROR,
+-                           _("bridge delay/stp options only allowed in "
++                           _("bridge delay/stp/zone options only allowed in "
+                              "route, nat, and isolated mode, not in %s "
+                              "(network '%s')"),
+                            virNetworkForwardTypeToString(def->forward.type),
+@@ -2478,6 +2487,7 @@ virNetworkDefFormatBuf(virBufferPtr buf,
+ 
+         virBufferAddLit(buf, "<bridge");
+         virBufferEscapeString(buf, " name='%s'", def->bridge);
++        virBufferEscapeString(buf, " zone='%s'", def->bridgeZone);
+         if (def->forward.type == VIR_NETWORK_FORWARD_NONE ||
+             def->forward.type == VIR_NETWORK_FORWARD_NAT ||
+             def->forward.type == VIR_NETWORK_FORWARD_ROUTE ||
+diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
+index 54c8ed1c4c..415792166f 100644
+--- a/src/conf/network_conf.h
++++ b/src/conf/network_conf.h
+@@ -237,6 +237,7 @@ struct _virNetworkDef {
+     int   connections; /* # of guest interfaces connected to this network */
+ 
+     char *bridge;       /* Name of bridge device */
++    char *bridgeZone;  /* name of firewalld zone for bridge */
+     int  macTableManager; /* enum virNetworkBridgeMACTableManager */
+     char *domain;
+     int domainLocalOnly; /* enum virTristateBool: yes disables dns forwarding */
+diff --git a/src/network/bridge_driver_linux.c b/src/network/bridge_driver_linux.c
+index 823d5a9742..121d42b646 100644
+--- a/src/network/bridge_driver_linux.c
++++ b/src/network/bridge_driver_linux.c
+@@ -642,49 +642,68 @@ int networkAddFirewallRules(virNetworkDefPtr def)
+     virFirewallPtr fw = NULL;
+     int ret = -1;
+ 
+-    /* if firewalld is active, try to set the "libvirt" zone. This is
+-     * desirable (for consistency) if firewalld is using the iptables
+-     * backend, but is necessary (for basic network connectivity) if
+-     * firewalld is using the nftables backend
+-     */
+-    if (virFirewallDIsRegistered() == 0) {
++    if (def->bridgeZone) {
+ 
+-        /* if the "libvirt" zone exists, then set it. If not, and
+-         * if firewalld is using the nftables backend, then we
+-         * need to log an error because the combination of
+-         * nftables + default zone means that traffic cannot be
+-         * forwarded (and even DHCP and DNS from guest to host
+-         * will probably no be permitted by the default zone
++        /* if a firewalld zone has been specified, fail/log an error
++         * if we can't honor it
+          */
+-        if (virFirewallDZoneExists("libvirt")) {
+-            if (virFirewallDInterfaceSetZone(def->bridge, "libvirt") < 0)
+-                goto cleanup;
+-        } else {
+-            unsigned long version;
+-            int vresult = virFirewallDGetVersion(&version);
++        if (virFirewallDIsRegistered() < 0) {
++            virReportError(VIR_ERR_INTERNAL_ERROR,
++                           _("zone %s requested for network %s "
++                             "but firewalld is not active"),
++                           def->bridgeZone, def->name);
++            goto cleanup;
++        }
+ 
+-            if (vresult < 0)
+-                goto cleanup;
++        if (virFirewallDInterfaceSetZone(def->bridge, def->bridgeZone) < 0)
++            goto cleanup;
+ 
+-            /* Support for nftables backend was added in firewalld
+-             * 0.6.0. Support for rule priorities (required by the
+-             * 'libvirt' zone, which should be installed by a
+-             * libvirt package, *not* by firewalld) was not added
+-             * until firewalld 0.7.0 (unless it was backported).
++    } else {
++
++        /* if firewalld is active, try to set the "libvirt" zone. This is
++         * desirable (for consistency) if firewalld is using the iptables
++         * backend, but is necessary (for basic network connectivity) if
++         * firewalld is using the nftables backend
++         */
++        if (virFirewallDIsRegistered() == 0) {
++
++            /* if the "libvirt" zone exists, then set it. If not, and
++             * if firewalld is using the nftables backend, then we
++             * need to log an error because the combination of
++             * nftables + default zone means that traffic cannot be
++             * forwarded (and even DHCP and DNS from guest to host
++             * will probably no be permitted by the default zone
+              */
+-            if (version >= 6000 &&
+-                virFirewallDGetBackend() == VIR_FIREWALLD_BACKEND_NFTABLES) {
+-                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+-                               _("firewalld is set to use the nftables "
+-                                 "backend, but the required firewalld "
+-                                 "'libvirt' zone is missing. Either set "
+-                                 "the firewalld backend to 'iptables', or "
+-                                 "ensure that firewalld has a 'libvirt' "
+-                                 "zone by upgrading firewalld to a "
+-                                 "version supporting rule priorities "
+-                                 "(0.7.0+) and/or rebuilding "
+-                                 "libvirt with --with-firewalld-zone"));
+-                goto cleanup;
++            if (virFirewallDZoneExists("libvirt")) {
++                if (virFirewallDInterfaceSetZone(def->bridge, "libvirt") < 0)
++                    goto cleanup;
++            } else {
++                unsigned long version;
++                int vresult = virFirewallDGetVersion(&version);
++
++                if (vresult < 0)
++                    goto cleanup;
++
++                /* Support for nftables backend was added in firewalld
++                 * 0.6.0. Support for rule priorities (required by the
++                 * 'libvirt' zone, which should be installed by a
++                 * libvirt package, *not* by firewalld) was not added
++                 * until firewalld 0.7.0 (unless it was backported).
++                 */
++                if (version >= 6000 &&
++                    virFirewallDGetBackend() == VIR_FIREWALLD_BACKEND_NFTABLES) {
++                    virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
++                                   _("firewalld is set to use the nftables "
++                                     "backend, but the required firewalld "
++                                     "'libvirt' zone is missing. Either set "
++                                     "the firewalld backend to 'iptables', or "
++                                     "ensure that firewalld has a 'libvirt' "
++                                     "zone by upgrading firewalld to a "
++                                     "version supporting rule priorities "
++                                     "(0.7.0+) and/or rebuilding "
++                                     "libvirt with --with-firewalld-zone"));
++                    goto cleanup;
++                }
+             }
+         }
+     }
+diff --git a/tests/networkxml2xmlin/routed-network.xml b/tests/networkxml2xmlin/routed-network.xml
+index ab5e15b1f6..fce01df132 100644
+--- a/tests/networkxml2xmlin/routed-network.xml
++++ b/tests/networkxml2xmlin/routed-network.xml
+@@ -1,7 +1,7 @@
+ <network>
+   <name>local</name>
+   <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid>
+-  <bridge name="virbr1"/>
++  <bridge name="virbr1" zone="myzone"/>
+   <mac address='12:34:56:78:9A:BC'/>
+   <forward mode="route" dev="eth1"/>
+   <ip address="192.168.122.1" netmask="255.255.255.0">
+diff --git a/tests/networkxml2xmlout/routed-network.xml b/tests/networkxml2xmlout/routed-network.xml
+index 81abf06e9f..2e13cf4ffa 100644
+--- a/tests/networkxml2xmlout/routed-network.xml
++++ b/tests/networkxml2xmlout/routed-network.xml
+@@ -4,7 +4,7 @@
+   <forward dev='eth1' mode='route'>
+     <interface dev='eth1'/>
+   </forward>
+-  <bridge name='virbr1' stp='on' delay='0'/>
++  <bridge name='virbr1' zone='myzone' stp='on' delay='0'/>
+   <mac address='12:34:56:78:9a:bc'/>
+   <ip address='192.168.122.1' netmask='255.255.255.0'>
+   </ip>
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-network-explicitly-allow-icmp-icmpv6-in-libvirt-zonefile.patch b/SOURCES/libvirt-network-explicitly-allow-icmp-icmpv6-in-libvirt-zonefile.patch
new file mode 100644
index 0000000..6478d5c
--- /dev/null
+++ b/SOURCES/libvirt-network-explicitly-allow-icmp-icmpv6-in-libvirt-zonefile.patch
@@ -0,0 +1,61 @@
+From f649b1f8a050402bbd1d28ee78e1522121347977 Mon Sep 17 00:00:00 2001
+Message-Id: <f649b1f8a050402bbd1d28ee78e1522121347977@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Thu, 14 Feb 2019 15:26:55 -0500
+Subject: [PATCH] network: explicitly allow icmp/icmpv6 in libvirt zonefile
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The libvirt zonefile for firewalld (added in commit 3b71f2e4) does the
+following:
+
+1) lists specific services it wants to allow, then
+
+2) uses a lower priority <reject/> rule to block all other services to
+   the host, and then finally,
+
+3) relies on the zone's default "accept" policy to, accept all
+   forwarded traffic (since forwarded traffic is ignored by the
+   slightly higher priority <reject/> rule in (2)).
+
+I had assumed that icmp traffic was either being allowed at the top of
+the rules, or that it would be ignored by the <reject/> rule and
+passed by the default accept policy (similar to forwarded traffic),
+but this assumption was incorrect; the <reject/> rule does block icmp
+traffic. This became apparent when DHCPv6 which requires ICMPv6 in
+addition to udp/dhcpv6) failed to work.
+
+This all means that in order to achieve our original goal of "similar
+behavior to a default reject policy, but also allowing forwarded
+traffic", we need to add rules to allow all icmp and icmpv6 traffic to
+the libvirt zone, and that's what this patch does.
+
+This is a further refinement of the resolution to
+https://bugzilla.redhat.com/1650320
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Acked-by: Eric Garver <eric@garver.life>
+(cherry picked from commit 41adfe8ca932e9fa34cd1b3f238c17b52e6b3888)
+Message-Id: <20190214202655.22715-1-laine@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/network/libvirt.zone | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/network/libvirt.zone b/src/network/libvirt.zone
+index bf81db1b6e..b1e84b52ec 100644
+--- a/src/network/libvirt.zone
++++ b/src/network/libvirt.zone
+@@ -15,6 +15,8 @@
+ <rule priority='32767'>
+   <reject/>
+ </rule>
++<protocol value='icmp'/>
++<protocol value='ipv6-icmp'/>
+ <service name='dhcp'/>
+ <service name='dhcpv6'/>
+ <service name='dns'/>
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-network-set-firewalld-zone-of-bridges-to-libvirt-zone-when-appropriate.patch b/SOURCES/libvirt-network-set-firewalld-zone-of-bridges-to-libvirt-zone-when-appropriate.patch
new file mode 100644
index 0000000..a6ec172
--- /dev/null
+++ b/SOURCES/libvirt-network-set-firewalld-zone-of-bridges-to-libvirt-zone-when-appropriate.patch
@@ -0,0 +1,174 @@
+From 8cc240a1652a465727d5b66d9fb6a5fa71656dba Mon Sep 17 00:00:00 2001
+Message-Id: <8cc240a1652a465727d5b66d9fb6a5fa71656dba@dist-git>
+From: Laine Stump <laine@redhat.com>
+Date: Fri, 1 Feb 2019 20:29:31 -0500
+Subject: [PATCH] network: set firewalld zone of bridges to "libvirt" zone when
+ appropriate
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch restores broken guest network connectivity after a host
+firewalld is switched to using an nftables backend. It does this by
+adding libvirt networks' bridge interfaces to the new "libvirt" zone
+in firewalld.
+
+After this patch, the bridge interface of any network created by
+libvirt (when firewalld is active) will be added to the firewalld
+zone called "libvirt" if it exists (regardless of the firewalld
+backend setting). This behavior does *not* depend on whether or not
+libvirt has installed the libvirt zone file (set with
+"--with[out]-firewalld-zone" during the configure phase of the package
+build).
+
+If the libvirt zone doesn't exist (either because the package was
+configured to not install it, or possibly it was installed, but
+firewalld doesn't support rule priorities, resulting in a parse
+error), the bridge will remain in firewalld's default zone, which
+could be innocuous (in the case that the firewalld backend is
+iptables, guest networking will still function properly with the
+bridge in the default zone), or it could be disastrous (if the
+firewalld backend is nftables, we can be assured that guest networking
+will fail). In order to be unobtrusive in the former case, and
+informative in the latter, when the libvirt zone doesn't exist we
+then check the firewalld version to see if it's new enough to support
+the nftables backend, and then if the backend is actually set to
+nftables, before logging an error (and failing the net-start
+operation, since the network couldn't possibly work anyway).
+
+When the libvirt zone is used, network behavior is *slightly*
+different from behavior of previous libvirt. In the past, libvirt
+network behavior would be affected by the configuration of firewalld's
+default zone (usually "public"), but now it is affected only by the
+"libvirt" zone), and thus almost surely warrants a release note for
+any distro upgrading to libvirt 5.1 or above. Although it's
+unfortunate that we have to deal with a mandatory behavior change, the
+architecture of multiple hooks makes it impossible to *not* change
+behavior in some way, and the new behavior is arguably better (since
+it will now be possible to manage access to the host from virtual
+machines vs from public interfaces separately).
+
+Creates-and-Resolves: https://bugzilla.redhat.com/1650320
+Resolves: https://bugzilla.redhat.com/1638342
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit ae05211a360077f56883cd0a6c0f82ed57f746cb)
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/firewall.html.in             | 33 +++++++++++++++++++++
+ src/network/bridge_driver_linux.c | 48 +++++++++++++++++++++++++++++++
+ 2 files changed, 81 insertions(+)
+
+diff --git a/docs/firewall.html.in b/docs/firewall.html.in
+index 0a50687c26..5d584e582e 100644
+--- a/docs/firewall.html.in
++++ b/docs/firewall.html.in
+@@ -129,6 +129,39 @@ MASQUERADE all  --  *      *       192.168.122.0/24    !192.168.122.0/24</pre>
+       </li>
+     </ul>
+ 
++    <h3><a id="fw-firewalld-and-virtual-network-driver">firewalld and the virtual network driver</a>
++    </h3>
++    <p>
++      If <a href="https://firewalld.org">firewalld</a> is active on
++      the host, libvirt will attempt to place the bridge interface of
++      a libvirt virtual network into the firewalld zone named
++      "libvirt" (thus making all guest->host traffic on that network
++      subject to the rules of the "libvirt" zone). This is done
++      because, if firewalld is using its nftables backend (available
++      since firewalld 0.6.0) the default firewalld zone (which would
++      be used if libvirt didn't explicitly set the zone) prevents
++      forwarding traffic from guests through the bridge, as well as
++      preventing DHCP, DNS, and most other traffic from guests to
++      host. The zone named "libvirt" is installed into the firewalld
++      configuration by libvirt (not by firewalld), and allows
++      forwarded traffic through the bridge as well as DHCP, DNS, TFTP,
++      and SSH traffic to the host - depending on firewalld's backend
++      this will be implemented via either iptables or nftables
++      rules. libvirt's own rules outlined above will *always* be
++      iptables rules regardless of which backend is in use by
++      firewalld.
++    </p>
++    <p>
++      NB: Prior to libvirt 5.1.0, the firewalld "libvirt" zone did not
++      exist, and prior to firewalld 0.7.0 a feature crucial to making
++      the "libvirt" zone operate properly (rich rule priority
++      settings) was not implemented in firewalld. In cases where one
++      or the other of the two packages is missing the necessary
++      functionality, it's still possible to have functional guest
++      networking by setting the firewalld backend to "iptables" (in
++      firewalld prior to 0.6.0, this was the only backend available).
++    </p>
++
+     <h3><a id="fw-network-filter-driver">The network filter driver</a>
+     </h3>
+     <p>This driver provides a fully configurable network filtering capability
+diff --git a/src/network/bridge_driver_linux.c b/src/network/bridge_driver_linux.c
+index 3effcdce22..823d5a9742 100644
+--- a/src/network/bridge_driver_linux.c
++++ b/src/network/bridge_driver_linux.c
+@@ -29,6 +29,7 @@
+ #include "virstring.h"
+ #include "virlog.h"
+ #include "virfirewall.h"
++#include "virfirewalld.h"
+ 
+ #define VIR_FROM_THIS VIR_FROM_NONE
+ 
+@@ -641,6 +642,53 @@ int networkAddFirewallRules(virNetworkDefPtr def)
+     virFirewallPtr fw = NULL;
+     int ret = -1;
+ 
++    /* if firewalld is active, try to set the "libvirt" zone. This is
++     * desirable (for consistency) if firewalld is using the iptables
++     * backend, but is necessary (for basic network connectivity) if
++     * firewalld is using the nftables backend
++     */
++    if (virFirewallDIsRegistered() == 0) {
++
++        /* if the "libvirt" zone exists, then set it. If not, and
++         * if firewalld is using the nftables backend, then we
++         * need to log an error because the combination of
++         * nftables + default zone means that traffic cannot be
++         * forwarded (and even DHCP and DNS from guest to host
++         * will probably no be permitted by the default zone
++         */
++        if (virFirewallDZoneExists("libvirt")) {
++            if (virFirewallDInterfaceSetZone(def->bridge, "libvirt") < 0)
++                goto cleanup;
++        } else {
++            unsigned long version;
++            int vresult = virFirewallDGetVersion(&version);
++
++            if (vresult < 0)
++                goto cleanup;
++
++            /* Support for nftables backend was added in firewalld
++             * 0.6.0. Support for rule priorities (required by the
++             * 'libvirt' zone, which should be installed by a
++             * libvirt package, *not* by firewalld) was not added
++             * until firewalld 0.7.0 (unless it was backported).
++             */
++            if (version >= 6000 &&
++                virFirewallDGetBackend() == VIR_FIREWALLD_BACKEND_NFTABLES) {
++                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
++                               _("firewalld is set to use the nftables "
++                                 "backend, but the required firewalld "
++                                 "'libvirt' zone is missing. Either set "
++                                 "the firewalld backend to 'iptables', or "
++                                 "ensure that firewalld has a 'libvirt' "
++                                 "zone by upgrading firewalld to a "
++                                 "version supporting rule priorities "
++                                 "(0.7.0+) and/or rebuilding "
++                                 "libvirt with --with-firewalld-zone"));
++                goto cleanup;
++            }
++        }
++    }
++
+     fw = virFirewallNew();
+ 
+     virFirewallStartTransaction(fw, 0);
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-networkGetDHCPLeases-Don-t-always-report-error-if-unable-to-read-leases-file.patch b/SOURCES/libvirt-networkGetDHCPLeases-Don-t-always-report-error-if-unable-to-read-leases-file.patch
new file mode 100644
index 0000000..ea712c5
--- /dev/null
+++ b/SOURCES/libvirt-networkGetDHCPLeases-Don-t-always-report-error-if-unable-to-read-leases-file.patch
@@ -0,0 +1,59 @@
+From dfd454d377c90f5a039c6a8487703dd604bffabc Mon Sep 17 00:00:00 2001
+Message-Id: <dfd454d377c90f5a039c6a8487703dd604bffabc@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Thu, 26 Jul 2018 11:41:09 +0200
+Subject: [PATCH] networkGetDHCPLeases: Don't always report error if unable to
+ read leases file
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1600468
+
+If we are unable to read leases file (no matter what the reason
+is), we return 0 - just like if there were no leases. However,
+because we use virFileReadAll() an error is printed into the log.
+Note that not all networks have leases file - only those for
+which we start dnsmasq.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 142c4b10fd8f55b7d2e86f5a184608da70f2edd3)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/network/bridge_driver.c | 21 ++++++++++++++-------
+ 1 file changed, 14 insertions(+), 7 deletions(-)
+
+diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
+index ac849581ec..1ad95d524c 100644
+--- a/src/network/bridge_driver.c
++++ b/src/network/bridge_driver.c
+@@ -4157,13 +4157,20 @@ networkGetDHCPLeases(virNetworkPtr net,
+     custom_lease_file = networkDnsmasqLeaseFileNameCustom(driver, def->bridge);
+ 
+     /* Read entire contents */
+-    if ((custom_lease_file_len = virFileReadAll(custom_lease_file,
+-                                                VIR_NETWORK_DHCP_LEASE_FILE_SIZE_MAX,
+-                                                &lease_entries)) < 0) {
+-        /* Even though src/network/leaseshelper.c guarantees the existence of
+-         * leases file (even if no leases are present), and the control reaches
+-         * here, instead of reporting error, return 0 leases */
+-        rv = 0;
++    if ((custom_lease_file_len = virFileReadAllQuiet(custom_lease_file,
++                                                     VIR_NETWORK_DHCP_LEASE_FILE_SIZE_MAX,
++                                                     &lease_entries)) < 0) {
++        /* Not all networks are guaranteed to have leases file.
++         * Only those which run dnsmasq. Therefore, if we failed
++         * to read the leases file, don't report error. Return 0
++         * leases instead. */
++        if (errno == ENOENT) {
++            rv = 0;
++        } else {
++            virReportSystemError(errno,
++                                 _("Unable to read leases file: %s"),
++                                 custom_lease_file);
++        }
+         goto error;
+     }
+ 
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-nwfilter-Resolve-SEGV-for-NWFilter-Snoop-processing.patch b/SOURCES/libvirt-nwfilter-Resolve-SEGV-for-NWFilter-Snoop-processing.patch
new file mode 100644
index 0000000..1bbd8b8
--- /dev/null
+++ b/SOURCES/libvirt-nwfilter-Resolve-SEGV-for-NWFilter-Snoop-processing.patch
@@ -0,0 +1,79 @@
+From 6293887f71e7db7ea8a3923aacf7d0fb27b47559 Mon Sep 17 00:00:00 2001
+Message-Id: <6293887f71e7db7ea8a3923aacf7d0fb27b47559@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Thu, 26 Jul 2018 09:39:32 -0400
+Subject: [PATCH] nwfilter: Resolve SEGV for NWFilter Snoop processing
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1599973
+
+Commit id fca9afa08 changed the @req->ifname to use
+@req->binding->portdevname fillingin the @req->binding
+in a similar way that @req->ifname would have been
+filled in during virNWFilterDHCPSnoopReq processing.
+
+However, in doing so it did not take into account some
+code paths where the @req->binding should be checked
+instead of @req->binding->portdevname. These checks
+led to SEGVs in some cases during libvirtd reload
+processing in virNWFilterSnoopRemAllReqIter (for
+stop during nwfilterStateCleanup processing) and
+virNWFilterSnoopReqLeaseDel (for start during
+nwfilterStateInitialize processing).
+
+In particular, when reading the nwfilter.leases file
+a new @req is created, but the @req->binding is not
+filled in. That's left to virNWFilterDHCPSnoopReq
+processing which checks if the @req already exists
+in the @virNWFilterSnoopState.snoopReqs hash table
+after adding a virNWFilterSnoopState.ifnameToKey
+entry for the @req->binding->portdevname by a
+@ref->ikey value.
+
+NB: virNWFilterSnoopIPLeaseInstallRule and
+    virNWFilterDHCPSnoopThread do not need the
+    req->binding check since they can only be called
+    after the filter->binding is created/assigned.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+ACKed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 5229494b01acf97dbc6f3028e9718667e9e1426a)
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/nwfilter/nwfilter_dhcpsnoop.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcpsnoop.c
+index 533c45f080..2ae134ed19 100644
+--- a/src/nwfilter/nwfilter_dhcpsnoop.c
++++ b/src/nwfilter/nwfilter_dhcpsnoop.c
+@@ -846,7 +846,7 @@ virNWFilterSnoopReqLeaseDel(virNWFilterSnoopReqPtr req,
+     int ret = 0;
+     virNWFilterSnoopIPLeasePtr ipl;
+     char *ipstr = NULL;
+-    int ipAddrLeft;
++    int ipAddrLeft = 0;
+ 
+     /* protect req->start, req->ifname and the lease */
+     virNWFilterSnoopReqLock(req);
+@@ -867,7 +867,8 @@ virNWFilterSnoopReqLeaseDel(virNWFilterSnoopReqPtr req,
+     if (update_leasefile)
+         virNWFilterSnoopLeaseFileSave(ipl);
+ 
+-    ipAddrLeft = virNWFilterIPAddrMapDelIPAddr(req->binding->portdevname, ipstr);
++    if (req->binding)
++        ipAddrLeft = virNWFilterIPAddrMapDelIPAddr(req->binding->portdevname, ipstr);
+ 
+     if (!req->threadkey || !instantiate)
+         goto skip_instantiate;
+@@ -2037,7 +2038,7 @@ virNWFilterSnoopRemAllReqIter(const void *payload,
+     /* protect req->binding->portdevname */
+     virNWFilterSnoopReqLock(req);
+ 
+-    if (req->binding->portdevname) {
++    if (req->binding && req->binding->portdevname) {
+         ignore_value(virHashRemoveEntry(virNWFilterSnoopState.ifnameToKey,
+                                         req->binding->portdevname));
+ 
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-Add-capability-for-the-HTM-pSeries-feature.patch b/SOURCES/libvirt-qemu-Add-capability-for-the-HTM-pSeries-feature.patch
new file mode 100644
index 0000000..0d846a7
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Add-capability-for-the-HTM-pSeries-feature.patch
@@ -0,0 +1,80 @@
+From 2069f9ba35378cf58c5636583ce76e68bead5a03 Mon Sep 17 00:00:00 2001
+Message-Id: <2069f9ba35378cf58c5636583ce76e68bead5a03@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Tue, 3 Jul 2018 15:25:15 +0200
+Subject: [PATCH] qemu: Add capability for the HTM pSeries feature
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+
+(cherry picked from commit 755a5765accf8fe9b2b8ec3fb01c37ac91313c7c)
+https: //bugzilla.redhat.com/show_bug.cgi?id=1525599
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Acked-by: David Gibson <dgibson@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_capabilities.c                     | 2 ++
+ src/qemu/qemu_capabilities.h                     | 1 +
+ tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml | 1 +
+ tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml  | 1 +
+ 4 files changed, 5 insertions(+)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index 37c8fbe3d3..c7da916f9a 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -501,6 +501,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
+               /* 310 */
+               "sev-guest",
+               "machine.pseries.cap-hpt-max-page-size",
++              "machine.pseries.cap-htm",
+     );
+ 
+ 
+@@ -1431,6 +1432,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMemoryBackendFile[] =
+ 
+ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsSPAPRMachine[] = {
+     { "cap-hpt-max-page-size", QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE },
++    { "cap-htm", QEMU_CAPS_MACHINE_PSERIES_CAP_HTM },
+ };
+ 
+ static virQEMUCapsObjectTypeProps virQEMUCapsObjectProps[] = {
+diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
+index df9bf49abb..a048a1cf02 100644
+--- a/src/qemu/qemu_capabilities.h
++++ b/src/qemu/qemu_capabilities.h
+@@ -485,6 +485,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
+     /* 310 */
+     QEMU_CAPS_SEV_GUEST, /* -object sev-guest,... */
+     QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE, /* -machine pseries.cap-hpt-max-page-size */
++    QEMU_CAPS_MACHINE_PSERIES_CAP_HTM, /* -machine pseries.cap-htm */
+ 
+     QEMU_CAPS_LAST /* this must always be the last item */
+ } virQEMUCapsFlags;
+diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
+index 2ee582f343..7139179304 100644
+--- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
+@@ -166,6 +166,7 @@
+   <flag name='vhost-vsock'/>
+   <flag name='chardev-fd-pass'/>
+   <flag name='tpm-emulator'/>
++  <flag name='machine.pseries.cap-htm'/>
+   <version>2011090</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>428334</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
+index 7e958b2efc..33cd00e613 100644
+--- a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
+@@ -166,6 +166,7 @@
+   <flag name='chardev-fd-pass'/>
+   <flag name='tpm-emulator'/>
+   <flag name='machine.pseries.cap-hpt-max-page-size'/>
++  <flag name='machine.pseries.cap-htm'/>
+   <version>2012050</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>446771</microcodeVersion>
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-Add-check-for-whether-KVM-nesting-is-enabled.patch b/SOURCES/libvirt-qemu-Add-check-for-whether-KVM-nesting-is-enabled.patch
new file mode 100644
index 0000000..e0a225d
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Add-check-for-whether-KVM-nesting-is-enabled.patch
@@ -0,0 +1,162 @@
+From 2e68dbce9f8d49e57a0e16a202483b59e9497054 Mon Sep 17 00:00:00 2001
+Message-Id: <2e68dbce9f8d49e57a0e16a202483b59e9497054@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Thu, 13 Dec 2018 10:54:33 -0500
+Subject: [PATCH] qemu: Add check for whether KVM nesting is enabled
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1645139
+
+Support for nested KVM is handled via a kernel module configuration
+parameters values for kvm_intel, kvm_amd, kvm_hv (PPC), or kvm (s390).
+While it's possible to fetch the kmod config values via virKModConfig,
+unfortunately that is the static value and we need to get the
+current/dynamic value from the kernel file system.
+
+So this patch adds a new API virHostKVMSupportsNesting that will
+search the 3 kernel modules to get the nesting value and check if
+it is 'Y' (or 'y' just in case) to return a true/false whether
+the KVM kernel supports nesting.
+
+We need to do this in order to handle cases where adjustments to
+the value are made after libvirtd is started to force a refetch of
+the latest QEMU capabilities since the correct CPU settings need
+to be made for a guest to add the "vmx=on" to/for the guest config.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+ACKed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit b183a75319b90d0af5512be513743e1eab950612)
+
+NB:
+Handled merge/build conflict/issue where VIR_AUTOFREE isn't defined
+(or backported to RHEL git).  So rather than relying on the automatic
+free of memory, prior to each possible return add a VIR_FREE. It was
+that or adjust the logic to set a retval and use goto cleanup type
+logic. This way just seemed cleaner.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_capabilities.c | 58 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 58 insertions(+)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index 57b1b99076..ba8c717e22 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -550,6 +550,7 @@ struct _virQEMUCaps {
+     virObject parent;
+ 
+     bool usedQMP;
++    bool kvmSupportsNesting;
+ 
+     char *binary;
+     time_t ctime;
+@@ -1606,6 +1607,7 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
+         return NULL;
+ 
+     ret->usedQMP = qemuCaps->usedQMP;
++    ret->kvmSupportsNesting = qemuCaps->kvmSupportsNesting;
+ 
+     if (VIR_STRDUP(ret->binary, qemuCaps->binary) < 0)
+         goto error;
+@@ -3597,6 +3599,9 @@ virQEMUCapsLoadCache(virArch hostArch,
+     virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
+     virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
+ 
++    if (virXPathBoolean("boolean(./kvmSupportsNesting)", ctxt) > 0)
++        qemuCaps->kvmSupportsNesting = true;
++
+     ret = 0;
+  cleanup:
+     VIR_FREE(str);
+@@ -3813,6 +3818,9 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps)
+     if (qemuCaps->sevCapabilities)
+         virQEMUCapsFormatSEVInfo(qemuCaps, &buf);
+ 
++    if (qemuCaps->kvmSupportsNesting)
++        virBufferAddLit(&buf, "<kvmSupportsNesting/>\n");
++
+     virBufferAdjustIndent(&buf, -2);
+     virBufferAddLit(&buf, "</qemuCaps>\n");
+ 
+@@ -3853,6 +3861,45 @@ virQEMUCapsSaveFile(void *data,
+ }
+ 
+ 
++/* Check the kernel module parameters 'nested' file to determine if enabled
++ *
++ *   Intel: 'kvm_intel' uses 'Y'
++ *   AMD:   'kvm_amd' uses '1'
++ *   PPC64: 'kvm_hv' uses 'Y'
++ *   S390:  'kvm' uses '1'
++ */
++static bool
++virQEMUCapsKVMSupportsNesting(void)
++{
++    static char const * const kmod[] = {"kvm_intel", "kvm_amd",
++                                        "kvm_hv", "kvm"};
++    char * value = NULL;
++    int rc;
++    size_t i;
++
++    for (i = 0; i < ARRAY_CARDINALITY(kmod); i++) {
++        VIR_FREE(value);
++        rc = virFileReadValueString(&value, "/sys/module/%s/parameters/nested",
++                                    kmod[i]);
++        if (rc == -2)
++            continue;
++        if (rc < 0) {
++            virResetLastError();
++            VIR_FREE(value);
++            return false;
++        }
++
++        if (value[0] == 'Y' || value[0] == 'y' || value[0] == '1') {
++            VIR_FREE(value);
++            return true;
++        }
++    }
++
++    VIR_FREE(value);
++    return false;
++}
++
++
+ static bool
+ virQEMUCapsIsValid(void *data,
+                    void *privData)
+@@ -3861,6 +3908,7 @@ virQEMUCapsIsValid(void *data,
+     virQEMUCapsCachePrivPtr priv = privData;
+     bool kvmUsable;
+     struct stat sb;
++    bool kvmSupportsNesting;
+ 
+     if (!qemuCaps->binary)
+         return true;
+@@ -3938,6 +3986,14 @@ virQEMUCapsIsValid(void *data,
+                       qemuCaps->kernelVersion);
+             return false;
+         }
++
++        kvmSupportsNesting = virQEMUCapsKVMSupportsNesting();
++        if (kvmSupportsNesting != qemuCaps->kvmSupportsNesting) {
++            VIR_DEBUG("Outdated capabilities for '%s': kvm kernel nested "
++                      "value changed from %d",
++                     qemuCaps->binary, qemuCaps->kvmSupportsNesting);
++            return false;
++        }
+     }
+ 
+     return true;
+@@ -4591,6 +4647,8 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
+ 
+         if (VIR_STRDUP(qemuCaps->kernelVersion, kernelVersion) < 0)
+             goto error;
++
++        qemuCaps->kvmSupportsNesting = virQEMUCapsKVMSupportsNesting();
+     }
+ 
+  cleanup:
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-Alter-qemuSetUnprivSGIO-hostdev-shareable-logic.patch b/SOURCES/libvirt-qemu-Alter-qemuSetUnprivSGIO-hostdev-shareable-logic.patch
new file mode 100644
index 0000000..80f7399
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Alter-qemuSetUnprivSGIO-hostdev-shareable-logic.patch
@@ -0,0 +1,53 @@
+From 861a1a4d299c57f31fa091c6b74cddf80681bdf0 Mon Sep 17 00:00:00 2001
+Message-Id: <861a1a4d299c57f31fa091c6b74cddf80681bdf0@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Mon, 17 Dec 2018 20:42:33 -0500
+Subject: [PATCH] qemu: Alter qemuSetUnprivSGIO hostdev shareable logic
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1656362 (RHEL8)
+https://bugzilla.redhat.com/show_bug.cgi?id=1656360 (RHEL7)
+
+RHEL-only
+
+Fix the logic to handle the case where if the <shareable/> element
+was removed from the domain <hostdev.../>, then we have to reset the
+SGIO value back to 0. Without this patch the check for not shareable
+and return 0 would bypass resetting the value back to 0.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_conf.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
+index de0cbca083..5971f3eb64 100644
+--- a/src/qemu/qemu_conf.c
++++ b/src/qemu/qemu_conf.c
+@@ -1667,9 +1667,6 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+     } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
+         hostdev = dev->data.hostdev;
+ 
+-        if (!qemuIsSharedHostdev(hostdev))
+-            return 0;
+-
+         if (!(hostdev_path = qemuGetHostdevPath(hostdev)))
+             goto cleanup;
+ 
+@@ -1686,7 +1683,9 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+         disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED) {
+         val = 1;
+     } else {
+-        if (hostdev->source.subsys.u.scsi.sgio ==
++        /* Only settable if <shareable/> was present for hostdev */
++        if (qemuIsSharedHostdev(hostdev) &&
++            hostdev->source.subsys.u.scsi.sgio ==
+             VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
+             val = 1;
+     }
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-Alter-val-usage-in-qemuSetUnprivSGIO.patch b/SOURCES/libvirt-qemu-Alter-val-usage-in-qemuSetUnprivSGIO.patch
new file mode 100644
index 0000000..87a119e
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Alter-val-usage-in-qemuSetUnprivSGIO.patch
@@ -0,0 +1,60 @@
+From c0f26a13c6ddd9aca729012d3a31347f77d52c68 Mon Sep 17 00:00:00 2001
+Message-Id: <c0f26a13c6ddd9aca729012d3a31347f77d52c68@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Mon, 17 Dec 2018 20:42:32 -0500
+Subject: [PATCH] qemu: Alter @val usage in qemuSetUnprivSGIO
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1656362 (RHEL8)
+https://bugzilla.redhat.com/show_bug.cgi?id=1656360 (RHEL7)
+
+RHEL-only
+
+Rather than initializing to -1 and then setting to the result
+of a boolean check (either 0 or 1), let's just initialize @val
+to 0 and then only change to 1 if conditions are "right".
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_conf.c | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
+index 7d15af9c0b..de0cbca083 100644
+--- a/src/qemu/qemu_conf.c
++++ b/src/qemu/qemu_conf.c
+@@ -1650,7 +1650,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+     char *sysfs_path = NULL;
+     char *hostdev_path = NULL;
+     const char *path = NULL;
+-    int val = -1;
++    int val = 0;
+     int ret = -1;
+ 
+     /* "sgio" is only valid for block disk; cdrom
+@@ -1682,11 +1682,14 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+         goto cleanup;
+ 
+     /* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0.  */
+-    if (dev->type == VIR_DOMAIN_DEVICE_DISK)
+-        val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
+-    else
+-        val = (hostdev->source.subsys.u.scsi.sgio ==
+-               VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
++    if (dev->type == VIR_DOMAIN_DEVICE_DISK &&
++        disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED) {
++        val = 1;
++    } else {
++        if (hostdev->source.subsys.u.scsi.sgio ==
++            VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
++            val = 1;
++    }
+ 
+     /* Do not do anything if unpriv_sgio is not supported by the kernel and the
+      * whitelist is enabled.  But if requesting unfiltered access, always call
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-Avoid-duplicate-resume-events-and-state-changes.patch b/SOURCES/libvirt-qemu-Avoid-duplicate-resume-events-and-state-changes.patch
new file mode 100644
index 0000000..119205a
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Avoid-duplicate-resume-events-and-state-changes.patch
@@ -0,0 +1,243 @@
+From 69532ea0b55b307884add6d95d70b998adcea60a Mon Sep 17 00:00:00 2001
+Message-Id: <69532ea0b55b307884add6d95d70b998adcea60a@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Wed, 12 Sep 2018 14:34:33 +0200
+Subject: [PATCH] qemu: Avoid duplicate resume events and state changes
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The only place where VIR_DOMAIN_EVENT_RESUMED should be generated is the
+RESUME event handler to make sure we don't generate duplicate events or
+state changes. In the worse case the duplicity can revert or cover
+changes done by other event handlers.
+
+For example, after QEMU sent RESUME, BLOCK_IO_ERROR, and STOP events
+we could happily mark the domain as running and report
+VIR_DOMAIN_EVENT_RESUMED to registered clients.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1612943
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit e6d77a75c4bf0c017d62b717b75e4bb6aa7a456b)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1634758
+https://bugzilla.redhat.com/show_bug.cgi?id=1634759
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_driver.c    | 13 -----------
+ src/qemu/qemu_migration.c | 49 ++++++++++++++++-----------------------
+ src/qemu/qemu_process.c   | 10 ++++----
+ 3 files changed, 24 insertions(+), 48 deletions(-)
+
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index ec1a43d41d..bafef1e3b5 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -1863,7 +1863,6 @@ static int qemuDomainResume(virDomainPtr dom)
+     virQEMUDriverPtr driver = dom->conn->privateData;
+     virDomainObjPtr vm;
+     int ret = -1;
+-    virObjectEventPtr event = NULL;
+     int state;
+     int reason;
+     virQEMUDriverConfigPtr cfg = NULL;
+@@ -1902,9 +1901,6 @@ static int qemuDomainResume(virDomainPtr dom)
+                                "%s", _("resume operation failed"));
+             goto endjob;
+         }
+-        event = virDomainEventLifecycleNewFromObj(vm,
+-                                         VIR_DOMAIN_EVENT_RESUMED,
+-                                         VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
+     }
+     if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
+         goto endjob;
+@@ -1915,7 +1911,6 @@ static int qemuDomainResume(virDomainPtr dom)
+ 
+  cleanup:
+     virDomainObjEndAPI(&vm);
+-    virObjectEventStateQueue(driver->domainEventState, event);
+     virObjectUnref(cfg);
+     return ret;
+ }
+@@ -16033,7 +16028,6 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
+     virDomainDefPtr config = NULL;
+     virQEMUDriverConfigPtr cfg = NULL;
+     virCapsPtr caps = NULL;
+-    bool was_running = false;
+     bool was_stopped = false;
+     qemuDomainSaveCookiePtr cookie;
+     virCPUDefPtr origCPU = NULL;
+@@ -16224,7 +16218,6 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
+             priv = vm->privateData;
+             if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
+                 /* Transitions 5, 6 */
+-                was_running = true;
+                 if (qemuProcessStopCPUs(driver, vm,
+                                         VIR_DOMAIN_PAUSED_FROM_SNAPSHOT,
+                                         QEMU_ASYNC_JOB_START) < 0)
+@@ -16321,12 +16314,6 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
+                 event = virDomainEventLifecycleNewFromObj(vm,
+                                                  VIR_DOMAIN_EVENT_STARTED,
+                                                  detail);
+-            } else if (!was_running) {
+-                /* Transition 8 */
+-                detail = VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT;
+-                event = virDomainEventLifecycleNewFromObj(vm,
+-                                                 VIR_DOMAIN_EVENT_RESUMED,
+-                                                 detail);
+             }
+         }
+         break;
+diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
+index 825a9d399b..67940330aa 100644
+--- a/src/qemu/qemu_migration.c
++++ b/src/qemu/qemu_migration.c
+@@ -2982,14 +2982,10 @@ qemuMigrationSrcConfirmPhase(virQEMUDriverPtr driver,
+         virFreeError(orig_err);
+ 
+         if (virDomainObjGetState(vm, &reason) == VIR_DOMAIN_PAUSED &&
+-            reason == VIR_DOMAIN_PAUSED_POSTCOPY) {
++            reason == VIR_DOMAIN_PAUSED_POSTCOPY)
+             qemuMigrationAnyPostcopyFailed(driver, vm);
+-        } else if (qemuMigrationSrcRestoreDomainState(driver, vm)) {
+-            event = virDomainEventLifecycleNewFromObj(vm,
+-                                                      VIR_DOMAIN_EVENT_RESUMED,
+-                                                      VIR_DOMAIN_EVENT_RESUMED_MIGRATED);
+-            virObjectEventStateQueue(driver->domainEventState, event);
+-        }
++        else
++            qemuMigrationSrcRestoreDomainState(driver, vm);
+ 
+         qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT,
+                                  priv->job.migParams, priv->job.apiFlags);
+@@ -4624,11 +4620,7 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver,
+         qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT,
+                                  priv->job.migParams, priv->job.apiFlags);
+ 
+-    if (qemuMigrationSrcRestoreDomainState(driver, vm)) {
+-        event = virDomainEventLifecycleNewFromObj(vm,
+-                                         VIR_DOMAIN_EVENT_RESUMED,
+-                                         VIR_DOMAIN_EVENT_RESUMED_MIGRATED);
+-    }
++    qemuMigrationSrcRestoreDomainState(driver, vm);
+ 
+     qemuMigrationJobFinish(driver, vm);
+     if (!virDomainObjIsActive(vm) && ret == 0) {
+@@ -4672,7 +4664,6 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver,
+                              unsigned long resource)
+ {
+     qemuDomainObjPrivatePtr priv = vm->privateData;
+-    virObjectEventPtr event = NULL;
+     int ret = -1;
+ 
+     /* If we didn't start the job in the begin phase, start it now. */
+@@ -4694,11 +4685,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver,
+                                         nmigrate_disks, migrate_disks, migParams);
+ 
+     if (ret < 0) {
+-        if (qemuMigrationSrcRestoreDomainState(driver, vm)) {
+-            event = virDomainEventLifecycleNewFromObj(vm,
+-                                                      VIR_DOMAIN_EVENT_RESUMED,
+-                                                      VIR_DOMAIN_EVENT_RESUMED_MIGRATED);
+-        }
++        qemuMigrationSrcRestoreDomainState(driver, vm);
+         goto endjob;
+     }
+ 
+@@ -4722,7 +4709,6 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver,
+ 
+  cleanup:
+     virDomainObjEndAPI(&vm);
+-    virObjectEventStateQueue(driver->domainEventState, event);
+     return ret;
+ }
+ 
+@@ -5074,13 +5060,8 @@ qemuMigrationDstFinish(virQEMUDriverPtr driver,
+                 goto endjob;
+         }
+ 
+-        if (inPostCopy) {
++        if (inPostCopy)
+             doKill = false;
+-            event = virDomainEventLifecycleNewFromObj(vm,
+-                                        VIR_DOMAIN_EVENT_RESUMED,
+-                                        VIR_DOMAIN_EVENT_RESUMED_POSTCOPY);
+-            virObjectEventStateQueue(driver->domainEventState, event);
+-        }
+     }
+ 
+     if (mig->jobInfo) {
+@@ -5111,10 +5092,20 @@ qemuMigrationDstFinish(virQEMUDriverPtr driver,
+ 
+     dom = virGetDomain(dconn, vm->def->name, vm->def->uuid, vm->def->id);
+ 
+-    event = virDomainEventLifecycleNewFromObj(vm,
+-                                              VIR_DOMAIN_EVENT_RESUMED,
+-                                              VIR_DOMAIN_EVENT_RESUMED_MIGRATED);
+-    virObjectEventStateQueue(driver->domainEventState, event);
++    if (inPostCopy) {
++        /* The only RESUME event during post-copy migration is triggered by
++         * QEMU when the running domain moves from the source to the
++         * destination host, but then the migration keeps running until all
++         * modified memory is transferred from the source host. This will
++         * result in VIR_DOMAIN_EVENT_RESUMED with RESUMED_POSTCOPY detail.
++         * However, our API documentation says we need to fire another RESUMED
++         * event at the very end of migration with RESUMED_MIGRATED detail.
++         */
++        event = virDomainEventLifecycleNewFromObj(vm,
++                                                  VIR_DOMAIN_EVENT_RESUMED,
++                                                  VIR_DOMAIN_EVENT_RESUMED_MIGRATED);
++        virObjectEventStateQueue(driver->domainEventState, event);
++    }
+ 
+     if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
+         virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_USER);
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index 37568165b7..2d51c0fa25 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -436,7 +436,6 @@ qemuProcessFakeReboot(void *opaque)
+     virDomainObjPtr vm = opaque;
+     qemuDomainObjPrivatePtr priv = vm->privateData;
+     virQEMUDriverPtr driver = priv->driver;
+-    virObjectEventPtr event = NULL;
+     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+     virDomainRunningReason reason = VIR_DOMAIN_RUNNING_BOOTED;
+     int ret = -1, rc;
+@@ -473,9 +472,6 @@ qemuProcessFakeReboot(void *opaque)
+         goto endjob;
+     }
+     priv->gotShutdown = false;
+-    event = virDomainEventLifecycleNewFromObj(vm,
+-                                     VIR_DOMAIN_EVENT_RESUMED,
+-                                     VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
+ 
+     if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0) {
+         VIR_WARN("Unable to save status on vm %s after state change",
+@@ -491,7 +487,6 @@ qemuProcessFakeReboot(void *opaque)
+     if (ret == -1)
+         ignore_value(qemuProcessKill(vm, VIR_QEMU_PROCESS_KILL_FORCE));
+     virDomainObjEndAPI(&vm);
+-    virObjectEventStateQueue(driver->domainEventState, event);
+     virObjectUnref(cfg);
+ }
+ 
+@@ -3073,7 +3068,10 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm,
+     if (ret < 0)
+         goto release;
+ 
+-    virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, reason);
++    /* The RESUME event handler will change the domain state with the reason
++     * saved in priv->runningReason and it will also emit corresponding domain
++     * lifecycle event.
++     */
+ 
+  cleanup:
+     virObjectUnref(cfg);
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-Avoid-probing-non-native-binaries-all-the-time.patch b/SOURCES/libvirt-qemu-Avoid-probing-non-native-binaries-all-the-time.patch
new file mode 100644
index 0000000..6f6b428
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Avoid-probing-non-native-binaries-all-the-time.patch
@@ -0,0 +1,45 @@
+From f8257195c948438cec0956ec4cc246d00d576d92 Mon Sep 17 00:00:00 2001
+Message-Id: <f8257195c948438cec0956ec4cc246d00d576d92@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Mon, 17 Sep 2018 18:00:51 +0200
+Subject: [PATCH] qemu: Avoid probing non-native binaries all the time
+
+A side effect of recent changes is that we would always try
+to regenerate the capabilities cache for non-native QEMU
+binaries based on /dev/kvm availability, which is of course
+complete nonsense. Make sure that doesn't happen.
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 55e5eb94788be06dd366de4987523bbc731672db)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1629862
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_capabilities.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index 14d7b8fbf7..9b3f35553b 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -3905,6 +3905,14 @@ virQEMUCapsIsValid(void *data,
+         return false;
+     }
+ 
++    if (!virQEMUCapsGuestIsNative(priv->hostArch, qemuCaps->arch)) {
++        VIR_DEBUG("Guest arch (%s) is not native to host arch (%s), "
++                  "skipping KVM-related checks",
++                  virArchToString(qemuCaps->arch),
++                  virArchToString(priv->hostArch));
++        return true;
++    }
++
+     kvmUsable = virFileAccessibleAs("/dev/kvm", R_OK | W_OK,
+                                     priv->runUid, priv->runGid) == 0;
+ 
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-Clarify-QEMU_CAPS_KVM.patch b/SOURCES/libvirt-qemu-Clarify-QEMU_CAPS_KVM.patch
new file mode 100644
index 0000000..076afca
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Clarify-QEMU_CAPS_KVM.patch
@@ -0,0 +1,88 @@
+From b8ca3f396e09f0ba190656363c0d1fc6a0dd9cd6 Mon Sep 17 00:00:00 2001
+Message-Id: <b8ca3f396e09f0ba190656363c0d1fc6a0dd9cd6@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Mon, 17 Sep 2018 18:00:52 +0200
+Subject: [PATCH] qemu: Clarify QEMU_CAPS_KVM
+
+This capability is documented as having one meaning (whether
+KVM is enabled by default) but is actually assigned two other
+meanings over its life: whether the query-kvm QMP command is
+available at first, and later on whether KVM is usable / was
+used during probing.
+
+Since the query-kvm QMP command was available in 1.5.0, we
+can avoid probing for it; additionally, we can simplify the
+logic by setting the flag when it applies instead of initially
+setting it and then clearing it when it doesn't.
+
+The flag's description is also updated to reflect reality.
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit c3be8bb4235b447dc29568f96b8c31cc741fc358)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1629862
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_capabilities.c | 19 ++-----------------
+ src/qemu/qemu_capabilities.h |  2 +-
+ 2 files changed, 3 insertions(+), 18 deletions(-)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index 9b3f35553b..c7ece21dd2 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -1003,7 +1003,6 @@ struct virQEMUCapsStringFlags virQEMUCapsCommands[] = {
+     { "block-stream", QEMU_CAPS_BLOCKJOB_ASYNC },
+     { "dump-guest-memory", QEMU_CAPS_DUMP_GUEST_MEMORY },
+     { "query-spice", QEMU_CAPS_SPICE },
+-    { "query-kvm", QEMU_CAPS_KVM },
+     { "block-commit", QEMU_CAPS_BLOCK_COMMIT },
+     { "query-vnc", QEMU_CAPS_VNC },
+     { "drive-mirror", QEMU_CAPS_DRIVE_MIRROR },
+@@ -2584,25 +2583,11 @@ virQEMUCapsProbeQMPKVMState(virQEMUCapsPtr qemuCaps,
+     bool enabled = false;
+     bool present = false;
+ 
+-    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
+-        return 0;
+-
+     if (qemuMonitorGetKVMState(mon, &enabled, &present) < 0)
+         return -1;
+ 
+-    /* The QEMU_CAPS_KVM flag was initially set according to the QEMU
+-     * reporting the recognition of 'query-kvm' QMP command. That merely
+-     * indicates existence of the command though, not whether KVM support
+-     * is actually available, nor whether it is enabled by default.
+-     *
+-     * If it is not present we need to clear the flag, and if it is
+-     * not enabled by default we need to change the flag.
+-     */
+-    if (!present) {
+-        virQEMUCapsClear(qemuCaps, QEMU_CAPS_KVM);
+-    } else if (!enabled) {
+-        virQEMUCapsClear(qemuCaps, QEMU_CAPS_KVM);
+-    }
++    if (present && enabled)
++        virQEMUCapsSet(qemuCaps, QEMU_CAPS_KVM);
+ 
+     return 0;
+ }
+diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
+index 98668115d6..6acd9fe825 100644
+--- a/src/qemu/qemu_capabilities.h
++++ b/src/qemu/qemu_capabilities.h
+@@ -65,7 +65,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
+     X_QEMU_CAPS_MIGRATE_QEMU_TCP, /* have qemu tcp migration */
+     X_QEMU_CAPS_MIGRATE_QEMU_EXEC, /* have qemu exec migration */
+     X_QEMU_CAPS_DRIVE_CACHE_V2, /* cache= flag wanting new v2 values */
+-    QEMU_CAPS_KVM, /* Whether KVM is enabled by default */
++    QEMU_CAPS_KVM, /* Whether KVM is usable / was used during probing */
+     X_QEMU_CAPS_DRIVE_FORMAT, /* Is -drive format= avail */
+ 
+     /* 15 */
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-Don-t-check-for-dev-kvm-presence.patch b/SOURCES/libvirt-qemu-Don-t-check-for-dev-kvm-presence.patch
new file mode 100644
index 0000000..dea2d19
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Don-t-check-for-dev-kvm-presence.patch
@@ -0,0 +1,45 @@
+From 748e6ba76086dbb122d6cd750ced935405194fc5 Mon Sep 17 00:00:00 2001
+Message-Id: <748e6ba76086dbb122d6cd750ced935405194fc5@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Mon, 17 Sep 2018 18:00:53 +0200
+Subject: [PATCH] qemu: Don't check for /dev/kvm presence
+
+The file being present doesn't necessarily mean anything these
+days, as it's created independently of whether the kvm module
+has been loaded[1]; moreover, we're already gathering all the
+information we need through QMP, so poking the filesystem at
+all is entirely unnecessary.
+
+[1] https://github.com/systemd/systemd/commit/d35d6249d5a7ed3228
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 2f8b91ee74ff617aba322d034119427cad977af9)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1629862
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_capabilities.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index c7ece21dd2..5fd10c2d40 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -832,9 +832,8 @@ virQEMUCapsInitGuestFromBinary(virCapsPtr caps,
+     if (!binary)
+         return 0;
+ 
+-    if (virFileExists("/dev/kvm") &&
+-        (virQEMUCapsGet(qemubinCaps, QEMU_CAPS_KVM) ||
+-         kvmbin))
++    if (virQEMUCapsGet(qemubinCaps, QEMU_CAPS_KVM) ||
++        kvmbin)
+         haskvm = true;
+ 
+     if (virQEMUCapsGetMachineTypesCaps(qemubinCaps, &nmachines, &machines) < 0)
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-Don-t-ignore-resume-events.patch b/SOURCES/libvirt-qemu-Don-t-ignore-resume-events.patch
new file mode 100644
index 0000000..cc514a5
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Don-t-ignore-resume-events.patch
@@ -0,0 +1,68 @@
+From f1857a275fc589565d1665c1a7239911ec72b9da Mon Sep 17 00:00:00 2001
+Message-Id: <f1857a275fc589565d1665c1a7239911ec72b9da@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Wed, 7 Nov 2018 14:34:52 +0100
+Subject: [PATCH] qemu: Don't ignore resume events
+
+Since commit v4.7.0-302-ge6d77a75c4 processing RESUME event is mandatory
+for updating domain state. But the event handler explicitly ignored this
+event in some cases. Thus the state would be wrong after a fake reboot
+or when a domain was rebooted after it crashed.
+
+BTW, the code to ignore RESUME event after SHUTDOWN didn't make sense
+even before making RESUME event mandatory. Most likely it was there as a
+result of careless copy&paste from qemuProcessHandleStop.
+
+The corresponding debug message was clarified since the original state
+does not have to be "paused" only and while we have a "resumed" event,
+the state is called "running".
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1612943
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit e47949357ba268e7e8c3adea7c262b84fa002302)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1634759
+https://bugzilla.redhat.com/show_bug.cgi?id=1634758
+https://bugzilla.redhat.com/show_bug.cgi?id=1643338
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/qemu/qemu_process.c | 12 +++---------
+ 1 file changed, 3 insertions(+), 9 deletions(-)
+
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index 23958bcbce..e4b19b938c 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -699,15 +699,10 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
+         priv->runningReason = VIR_DOMAIN_RUNNING_UNKNOWN;
+     }
+ 
+-    if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
+-        if (priv->gotShutdown) {
+-            VIR_DEBUG("Ignoring RESUME event after SHUTDOWN");
+-            goto unlock;
+-        }
+-
++    if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_RUNNING) {
+         eventDetail = qemuDomainRunningReasonToResumeEvent(reason);
+-        VIR_DEBUG("Transitioned guest %s out of paused into resumed state, "
+-                  "reason '%s', event detail %d",
++        VIR_DEBUG("Transitioned guest %s into running state, reason '%s', "
++                  "event detail %d",
+                   vm->def->name, virDomainRunningReasonTypeToString(reason),
+                   eventDetail);
+ 
+@@ -722,7 +717,6 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
+         }
+     }
+ 
+- unlock:
+     virObjectUnlock(vm);
+     virObjectEventStateQueue(driver->domainEventState, event);
+     virObjectUnref(cfg);
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-Drop-QEMU_CAPS_ENABLE_KVM.patch b/SOURCES/libvirt-qemu-Drop-QEMU_CAPS_ENABLE_KVM.patch
new file mode 100644
index 0000000..232cc8c
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Drop-QEMU_CAPS_ENABLE_KVM.patch
@@ -0,0 +1,108 @@
+From ab9d2e264ba8a544eadb9e1b72a4a5d0f4789815 Mon Sep 17 00:00:00 2001
+Message-Id: <ab9d2e264ba8a544eadb9e1b72a4a5d0f4789815@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Mon, 17 Sep 2018 18:00:50 +0200
+Subject: [PATCH] qemu: Drop QEMU_CAPS_ENABLE_KVM
+
+It was already available in 1.5.0.
+
+Moreover, we're not even formatting it on the QEMU command
+line, ever: we just use it as part of some logic that decides
+whether KVM support should be advertised, and as it turns out
+that logic is actually buggy and dropping this capability
+fixes it.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1628469
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 88983855d5496a74b97551860db737c2b17b100e)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1629862
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_capabilities.c |  3 ---
+ src/qemu/qemu_capabilities.h |  2 +-
+ tests/qemuxml2argvtest.c     | 11 +++++------
+ 3 files changed, 6 insertions(+), 10 deletions(-)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index 1321696d11..14d7b8fbf7 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -834,7 +834,6 @@ virQEMUCapsInitGuestFromBinary(virCapsPtr caps,
+ 
+     if (virFileExists("/dev/kvm") &&
+         (virQEMUCapsGet(qemubinCaps, QEMU_CAPS_KVM) ||
+-         virQEMUCapsGet(qemubinCaps, QEMU_CAPS_ENABLE_KVM) ||
+          kvmbin))
+         haskvm = true;
+ 
+@@ -2603,7 +2602,6 @@ virQEMUCapsProbeQMPKVMState(virQEMUCapsPtr qemuCaps,
+         virQEMUCapsClear(qemuCaps, QEMU_CAPS_KVM);
+     } else if (!enabled) {
+         virQEMUCapsClear(qemuCaps, QEMU_CAPS_KVM);
+-        virQEMUCapsSet(qemuCaps, QEMU_CAPS_ENABLE_KVM);
+     }
+ 
+     return 0;
+@@ -3911,7 +3909,6 @@ virQEMUCapsIsValid(void *data,
+                                     priv->runUid, priv->runGid) == 0;
+ 
+     if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) &&
+-        virQEMUCapsGet(qemuCaps, QEMU_CAPS_ENABLE_KVM) &&
+         kvmUsable) {
+         VIR_DEBUG("KVM was not enabled when probing '%s', "
+                   "but it should be usable now",
+diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
+index 9e8ad5f5c3..98668115d6 100644
+--- a/src/qemu/qemu_capabilities.h
++++ b/src/qemu/qemu_capabilities.h
+@@ -79,7 +79,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
+     X_QEMU_CAPS_XEN_DOMID, /* -xen-domid */
+     X_QEMU_CAPS_MIGRATE_QEMU_UNIX, /* qemu migration via unix sockets */
+     X_QEMU_CAPS_CHARDEV, /* Is the new -chardev arg available */
+-    QEMU_CAPS_ENABLE_KVM, /* -enable-kvm flag */
++    X_QEMU_CAPS_ENABLE_KVM, /* -enable-kvm flag */
+     X_QEMU_CAPS_MONITOR_JSON, /* JSON mode for monitor */
+ 
+     /* 25 */
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index ebe9c8a131..13e95fe28a 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -912,16 +912,15 @@ mymain(void)
+     DO_TEST("clock-france", NONE);
+     DO_TEST("clock-hpet-off", NONE);
+     DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
+-    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
+-    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
++    DO_TEST("cpu-kvmclock", NONE);
++    DO_TEST("cpu-host-kvmclock", NONE);
+     DO_TEST("kvmclock", QEMU_CAPS_KVM);
+     DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
+ 
+-    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
+-    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
++    DO_TEST("cpu-eoi-disabled", NONE);
++    DO_TEST("cpu-eoi-enabled", NONE);
+     DO_TEST("controller-order",
+             QEMU_CAPS_KVM,
+-            QEMU_CAPS_ENABLE_KVM,
+             QEMU_CAPS_PIIX3_USB_UHCI,
+             QEMU_CAPS_CCID_PASSTHRU,
+             QEMU_CAPS_SPICE,
+@@ -933,7 +932,7 @@ mymain(void)
+     DO_TEST("eoi-enabled", NONE);
+     DO_TEST("pv-spinlock-disabled", NONE);
+     DO_TEST("pv-spinlock-enabled", NONE);
+-    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
++    DO_TEST("kvmclock+eoi-disabled", NONE);
+ 
+     DO_TEST("hyperv", NONE);
+     DO_TEST("hyperv-off", NONE);
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-Drop-duplicated-code-from-qemuDomainDefValidateFeatures.patch b/SOURCES/libvirt-qemu-Drop-duplicated-code-from-qemuDomainDefValidateFeatures.patch
new file mode 100644
index 0000000..83ea0df
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Drop-duplicated-code-from-qemuDomainDefValidateFeatures.patch
@@ -0,0 +1,60 @@
+From cc56efa7f1681ae29b8a5de14bd31d35029a249a Mon Sep 17 00:00:00 2001
+Message-Id: <cc56efa7f1681ae29b8a5de14bd31d35029a249a@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Tue, 4 Dec 2018 16:46:16 +0100
+Subject: [PATCH] qemu: Drop duplicated code from
+ qemuDomainDefValidateFeatures()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Both VIR_DOMAIN_FEATURE_HPT and VIR_DOMAIN_FEATURE_HTM are
+handled in the exact same way, so we can remove some duplicated
+code without losing any functionality.
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit 094c97ffadda41bb2ce2dfe699710630218975f2)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1647822
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_domain.c | 14 +-------------
+ 1 file changed, 1 insertion(+), 13 deletions(-)
+
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 08f479fa1d..4fcca1e05a 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -3818,6 +3818,7 @@ qemuDomainDefValidateFeatures(const virDomainDef *def,
+             break;
+ 
+         case VIR_DOMAIN_FEATURE_HPT:
++        case VIR_DOMAIN_FEATURE_HTM:
+             if (def->features[i] != VIR_TRISTATE_SWITCH_ABSENT &&
+                 !qemuDomainIsPSeries(def)) {
+                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+@@ -3852,19 +3853,6 @@ qemuDomainDefValidateFeatures(const virDomainDef *def,
+             }
+             break;
+ 
+-        case VIR_DOMAIN_FEATURE_HTM:
+-            if (def->features[i] != VIR_TRISTATE_SWITCH_ABSENT &&
+-                !qemuDomainIsPSeries(def)) {
+-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+-                               _("The '%s' feature is not supported for "
+-                                 "architecture '%s' or machine type '%s'"),
+-                               featureName,
+-                               virArchToString(def->os.arch),
+-                               def->os.machine);
+-                return -1;
+-            }
+-            break;
+-
+         case VIR_DOMAIN_FEATURE_ACPI:
+         case VIR_DOMAIN_FEATURE_APIC:
+         case VIR_DOMAIN_FEATURE_PAE:
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-Exempt-video-model-none-from-getting-a-PCI-address-on-Q35.patch b/SOURCES/libvirt-qemu-Exempt-video-model-none-from-getting-a-PCI-address-on-Q35.patch
new file mode 100644
index 0000000..a25df7a
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Exempt-video-model-none-from-getting-a-PCI-address-on-Q35.patch
@@ -0,0 +1,45 @@
+From 2ef60f04d9beea2d46cfd4344a8c5482276979c2 Mon Sep 17 00:00:00 2001
+Message-Id: <2ef60f04d9beea2d46cfd4344a8c5482276979c2@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Tue, 31 Jul 2018 10:38:54 +0200
+Subject: [PATCH] qemu: Exempt video model 'none' from getting a PCI address on
+ Q35
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Commit d48813e8 made sure we wouldn't get one for i440fx, but not for Q35
+machine type. If the primary video didn't get the assumed 0:0:1.0 PCI
+address, the evaluation then failed with: "Cannot automatically add a
+new PCI bus for a device with connect flags 00"
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1609087
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit e9024b0cec3a66ac11784034bb62abe8ec7b46a1)
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_domain_address.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
+index e6996934b8..0cb5af4a87 100644
+--- a/src/qemu/qemu_domain_address.c
++++ b/src/qemu/qemu_domain_address.c
+@@ -1723,10 +1723,11 @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDefPtr def,
+            goto cleanup;
+     }
+ 
+-    if (def->nvideos > 0) {
++    if (def->nvideos > 0 &&
++        def->videos[0]->type != VIR_DOMAIN_VIDEO_TYPE_NONE) {
+         /* NB: unlike the pc machinetypes, on q35 machinetypes the
+          * integrated devices are at slot 0x1f, so when qemu looks for
+-         * the first free lot for the first VGA, it will always be at
++         * the first free slot for the first VGA, it will always be at
+          * slot 1 (which was used up by the integrated PIIX3 devices
+          * on pc machinetypes).
+          */
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-Extract-MDEV-VFIO-PCI-validation-code-into-a-separate-helper.patch b/SOURCES/libvirt-qemu-Extract-MDEV-VFIO-PCI-validation-code-into-a-separate-helper.patch
new file mode 100644
index 0000000..a9b56c3
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Extract-MDEV-VFIO-PCI-validation-code-into-a-separate-helper.patch
@@ -0,0 +1,93 @@
+From 46dc4f557546c024c273e0e21110698cdfffe8ae Mon Sep 17 00:00:00 2001
+Message-Id: <46dc4f557546c024c273e0e21110698cdfffe8ae@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Fri, 30 Nov 2018 15:49:25 +0100
+Subject: [PATCH] qemu: Extract MDEV VFIO PCI validation code into a separate
+ helper
+
+Since we'll need to validate other models apart from VFIO PCI too,
+having a helper for each model should keep the code base cleaner.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
+(cherry picked from commit 208d6e6f5aafa102d04ce300c6338b0736bb52df)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1508146
+
+Signed-off-by: Pino Toscano <ptoscano@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_domain.c | 35 +++++++++++++++++++++++++++++------
+ 1 file changed, 29 insertions(+), 6 deletions(-)
+
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index d80f9b393e..4898d58733 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -4451,11 +4451,11 @@ qemuDomainDeviceDefValidateNetwork(const virDomainNetDef *net)
+ 
+ 
+ static int
+-qemuDomainMdevDefValidate(const virDomainHostdevSubsysMediatedDev *mdevsrc,
+-                          const virDomainDef *def,
+-                          virQEMUCapsPtr qemuCaps)
++qemuDomainMdevDefVFIOPCIValidate(const virDomainHostdevSubsysMediatedDev *dev,
++                                 const virDomainDef *def,
++                                 virQEMUCapsPtr qemuCaps)
+ {
+-    if (mdevsrc->display == VIR_TRISTATE_SWITCH_ABSENT)
++    if (dev->display == VIR_TRISTATE_SWITCH_ABSENT)
+         return 0;
+ 
+     if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VFIO_PCI_DISPLAY)) {
+@@ -4465,7 +4465,7 @@ qemuDomainMdevDefValidate(const virDomainHostdevSubsysMediatedDev *mdevsrc,
+         return -1;
+     }
+ 
+-    if (mdevsrc->model != VIR_MDEV_MODEL_TYPE_VFIO_PCI) {
++    if (dev->model != VIR_MDEV_MODEL_TYPE_VFIO_PCI) {
+         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                        _("<hostdev> attribute 'display' is only supported"
+                          " with model='vfio-pci'"));
+@@ -4473,7 +4473,7 @@ qemuDomainMdevDefValidate(const virDomainHostdevSubsysMediatedDev *mdevsrc,
+         return -1;
+     }
+ 
+-    if (mdevsrc->display == VIR_TRISTATE_SWITCH_ON) {
++    if (dev->display == VIR_TRISTATE_SWITCH_ON) {
+         if (def->ngraphics == 0) {
+             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                            _("graphics device is needed for attribute value "
+@@ -4486,6 +4486,29 @@ qemuDomainMdevDefValidate(const virDomainHostdevSubsysMediatedDev *mdevsrc,
+ }
+ 
+ 
++static int
++qemuDomainMdevDefValidate(const virDomainHostdevSubsysMediatedDev *mdevsrc,
++                          const virDomainDef *def,
++                          virQEMUCapsPtr qemuCaps)
++{
++    switch ((virMediatedDeviceModelType) mdevsrc->model) {
++    case VIR_MDEV_MODEL_TYPE_VFIO_PCI:
++        return qemuDomainMdevDefVFIOPCIValidate(mdevsrc, def, qemuCaps);
++    case VIR_MDEV_MODEL_TYPE_VFIO_AP:
++        break;
++    case VIR_MDEV_MODEL_TYPE_VFIO_CCW:
++        break;
++    case VIR_MDEV_MODEL_TYPE_LAST:
++    default:
++        virReportEnumRangeError(virMediatedDeviceModelType,
++                                mdevsrc->model);
++        return -1;
++    }
++
++    return 0;
++}
++
++
+ static int
+ qemuDomainDeviceDefValidateHostdev(const virDomainHostdevDef *hostdev,
+                                    const virDomainDef *def,
+-- 
+2.19.2
+
diff --git a/SOURCES/libvirt-qemu-Fetch-pr-helper-process-info-on-reconnect.patch b/SOURCES/libvirt-qemu-Fetch-pr-helper-process-info-on-reconnect.patch
new file mode 100644
index 0000000..9a7801a
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Fetch-pr-helper-process-info-on-reconnect.patch
@@ -0,0 +1,104 @@
+From deb8789da55b84c99df417f3cd07db52cac8f89b Mon Sep 17 00:00:00 2001
+Message-Id: <deb8789da55b84c99df417f3cd07db52cac8f89b@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 11 Jul 2018 17:27:28 +0200
+Subject: [PATCH] qemu: Fetch pr-helper process info on reconnect
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1470007
+
+If qemu-pr-helper process died while libvirtd was not running no
+event is emitted. Therefore, when reconnecting to the monitor we
+must check the qemu-pr-helper process status and act accordingly.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit ab435a4be4673a9a38e0315864b9cf4f9bee03e7)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_process.c | 60 +++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 60 insertions(+)
+
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index fbc8529f3b..c903a8e5c8 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -2071,6 +2071,63 @@ qemuRefreshVirtioChannelState(virQEMUDriverPtr driver,
+     return ret;
+ }
+ 
++
++static int
++qemuProcessRefreshPRManagerState(virDomainObjPtr vm,
++                                 virHashTablePtr info)
++{
++    qemuDomainObjPrivatePtr priv = vm->privateData;
++    qemuMonitorPRManagerInfoPtr prManagerInfo;
++    const char *managedAlias = qemuDomainGetManagedPRAlias();
++    int ret = -1;
++
++    if (!(prManagerInfo = virHashLookup(info, managedAlias))) {
++        virReportError(VIR_ERR_OPERATION_FAILED,
++                       _("missing info on pr-manager %s"),
++                       managedAlias);
++        goto cleanup;
++    }
++
++    priv->prDaemonRunning = prManagerInfo->connected;
++
++    if (!priv->prDaemonRunning &&
++        qemuProcessStartManagedPRDaemon(vm) < 0)
++        goto cleanup;
++
++    ret = 0;
++ cleanup:
++    return ret;
++}
++
++
++static int
++qemuRefreshPRManagerState(virQEMUDriverPtr driver,
++                          virDomainObjPtr vm)
++{
++    qemuDomainObjPrivatePtr priv = vm->privateData;
++    virHashTablePtr info = NULL;
++    int ret = -1;
++
++    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_PR_MANAGER_HELPER) ||
++        !virDomainDefHasManagedPR(vm->def))
++        return 0;
++
++    qemuDomainObjEnterMonitor(driver, vm);
++    ret = qemuMonitorGetPRManagerInfo(priv->mon, &info);
++    if (qemuDomainObjExitMonitor(driver, vm) < 0)
++        ret = -1;
++
++    if (ret < 0)
++        goto cleanup;
++
++    ret = qemuProcessRefreshPRManagerState(vm, info);
++
++ cleanup:
++    virHashFree(info);
++    return ret;
++}
++
++
+ static void
+ qemuRefreshRTC(virQEMUDriverPtr driver,
+                virDomainObjPtr vm)
+@@ -7736,6 +7793,9 @@ qemuProcessReconnect(void *opaque)
+     if (qemuProcessUpdateDevices(driver, obj) < 0)
+         goto error;
+ 
++    if (qemuRefreshPRManagerState(driver, obj) < 0)
++        goto error;
++
+     qemuProcessReconnectCheckMemAliasOrderMismatch(obj);
+ 
+     if (qemuConnectAgent(driver, obj) < 0)
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-Filter-non-SCSI-hostdevs-in-qemuHostdevPrepareSCSIDevices.patch b/SOURCES/libvirt-qemu-Filter-non-SCSI-hostdevs-in-qemuHostdevPrepareSCSIDevices.patch
new file mode 100644
index 0000000..9414a02
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Filter-non-SCSI-hostdevs-in-qemuHostdevPrepareSCSIDevices.patch
@@ -0,0 +1,41 @@
+From 057c1927b6d652591931d1cf2bc0217834b30e12 Mon Sep 17 00:00:00 2001
+Message-Id: <057c1927b6d652591931d1cf2bc0217834b30e12@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Fri, 11 Jan 2019 09:15:38 -0500
+Subject: [PATCH] qemu: Filter non SCSI hostdevs in
+ qemuHostdevPrepareSCSIDevices
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1665244
+
+When commit 1d94b3e7 added code to walk the [n]hostdevs list looking
+to add shared hostdevs, it should've filtered any hostdevs that were
+not SCSI hostdev's.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit f30ac207ad96a567ade0d8a49023ade9233b2b72)
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_hostdev.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c
+index 1e040f98b7..8b1ad6b447 100644
+--- a/src/qemu/qemu_hostdev.c
++++ b/src/qemu/qemu_hostdev.c
+@@ -278,6 +278,9 @@ qemuHostdevPrepareSCSIDevices(virQEMUDriverPtr driver,
+     for (i = 0; i < nhostdevs; i++) {
+         virDomainDeviceDef dev;
+ 
++        if (!virHostdevIsSCSIDevice(hostdevs[i]))
++            continue;
++
+         dev.type = VIR_DOMAIN_DEVICE_HOSTDEV;
+         dev.data.hostdev = hostdevs[i];
+ 
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-Fix-ATTRIBUTE_NONNULL-for-qemuMonitorAddObject.patch b/SOURCES/libvirt-qemu-Fix-ATTRIBUTE_NONNULL-for-qemuMonitorAddObject.patch
new file mode 100644
index 0000000..130dc62
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Fix-ATTRIBUTE_NONNULL-for-qemuMonitorAddObject.patch
@@ -0,0 +1,41 @@
+From ea272bb13a0ef6ab04c78ca671f009506211523b Mon Sep 17 00:00:00 2001
+Message-Id: <ea272bb13a0ef6ab04c78ca671f009506211523b@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Fri, 13 Jul 2018 10:02:34 +0200
+Subject: [PATCH] qemu: Fix ATTRIBUTE_NONNULL for qemuMonitorAddObject
+
+Commit id fac0dacd was trying to make things more robust;
+however, the ATTRIBUTE_NONNULL(1) would be for the @mon,
+not the intended (2) and the @props argument as described
+in the commit message.
+
+Found by Coverity build.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 7406ab691ffe0fbe051f6ae57614737e193df6a5)
+
+The broken commit described in the original commit message was
+backported as 1d60f6832c8b14c9a
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1598015
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_monitor.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
+index e8ed2d044c..81474a04f6 100644
+--- a/src/qemu/qemu_monitor.h
++++ b/src/qemu/qemu_monitor.h
+@@ -824,7 +824,7 @@ int qemuMonitorCreateObjectProps(virJSONValuePtr *propsret,
+ int qemuMonitorAddObject(qemuMonitorPtr mon,
+                          virJSONValuePtr *props,
+                          char **alias)
+-    ATTRIBUTE_NONNULL(1);
++    ATTRIBUTE_NONNULL(2);
+ 
+ int qemuMonitorDelObject(qemuMonitorPtr mon,
+                          const char *objalias);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-Fix-logic-error-in-qemuSetUnprivSGIO.patch b/SOURCES/libvirt-qemu-Fix-logic-error-in-qemuSetUnprivSGIO.patch
new file mode 100644
index 0000000..8e8d799
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Fix-logic-error-in-qemuSetUnprivSGIO.patch
@@ -0,0 +1,59 @@
+From d0f2fffa7c1a86f56f18143a1a14b9a32f8bcf16 Mon Sep 17 00:00:00 2001
+Message-Id: <d0f2fffa7c1a86f56f18143a1a14b9a32f8bcf16@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Wed, 16 Jan 2019 15:54:31 -0500
+Subject: [PATCH] qemu: Fix logic error in qemuSetUnprivSGIO
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1666605
+
+RHEL-only
+
+Commit c0f26a13c6 had a logic error with using both DISK and
+sgio which resulted in a DISK that didn't have sgio set falling
+into the else clause and trying to deref a NULL @hostdev resulting
+in a libvirtd crash:
+
+Thread 1 (Thread 0x7ffbc6353700 (LWP 12642)):
+ 0  0x00007ffb958e7d7a in qemuSetUnprivSGIO
+ 1  0x00007ffb958d9d92 in qemuDomainAttachDeviceDiskLive
+ 2  0x00007ffb9594fce8 in qemuDomainAttachDeviceFlags
+ 3  0x00007ffbde399d71 in virDomainAttachDevice
+ 4  0x0000563b73ded4b2 in remoteDispatchDomainAttachDeviceHelper
+
+for hotplug of XML:
+
+<disk device="lun" type="block">
+  <source dev="/dev/sdb"/>
+  <driver name="qemu" type="raw"/>
+  <target bus="scsi" dev="sdb"/>
+</disk>
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_conf.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
+index 5971f3eb64..768e9d8308 100644
+--- a/src/qemu/qemu_conf.c
++++ b/src/qemu/qemu_conf.c
+@@ -1679,9 +1679,9 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+         goto cleanup;
+ 
+     /* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0.  */
+-    if (dev->type == VIR_DOMAIN_DEVICE_DISK &&
+-        disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED) {
+-        val = 1;
++    if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
++        if (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
++            val = 1;
+     } else {
+         /* Only settable if <shareable/> was present for hostdev */
+         if (qemuIsSharedHostdev(hostdev) &&
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-Fix-post-copy-migration-on-the-source.patch b/SOURCES/libvirt-qemu-Fix-post-copy-migration-on-the-source.patch
new file mode 100644
index 0000000..322dbca
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Fix-post-copy-migration-on-the-source.patch
@@ -0,0 +1,110 @@
+From 91a37e3641afbd29067cd945ca14a6572e4d4897 Mon Sep 17 00:00:00 2001
+Message-Id: <91a37e3641afbd29067cd945ca14a6572e4d4897@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Thu, 15 Nov 2018 11:16:43 +0100
+Subject: [PATCH] qemu: Fix post-copy migration on the source
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Post-copy migration has been broken on the source since commit
+v3.8.0-245-g32c29f10db which implemented support for
+pause-before-switchover QEMU migration capability.
+
+Even though the migration itself went well, the source did not really
+know when it switched to the post-copy mode despite the messages logged
+by MIGRATION event handler. As a result of this, the events emitted by
+source libvirtd were not accurate and statistics of the completed
+migration would cover only the pre-copy part of migration. Moreover, if
+migration failed during the post-copy phase for some reason, the source
+libvirtd would just happily resume the domain, which could lead to disk
+corruption.
+
+With the pause-before-switchover capability enabled, the order of events
+emitted by QEMU changed:
+
+                    pause-before-switchover
+           disabled                        enabled
+    MIGRATION, postcopy-active      STOP
+    STOP                            MIGRATION, pre-switchover
+                                    MIGRATION, postcopy-active
+
+The STOP even handler checks the migration status (postcopy-active) and
+sets the domain state accordingly. Which is sufficient when
+pause-before-switchover is disabled, but once we enable it, the
+migration status is still active when we get STOP from QEMU. Thus the
+domain state set in the STOP handler has to be corrected once we are
+notified that migration changed to postcopy-active.
+
+This results in two SUSPENDED events to be emitted by the source
+libvirtd during post-copy migration. The first one with
+VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED detail, while the second one reports
+the corrected VIR_DOMAIN_EVENT_SUSPENDED_POSTCOPY detail. This is
+inevitable because we don't know whether migration will eventually
+switch to post-copy at the time we emit the first event.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1647365
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit eca9d21e6cc8129ec4426fbf1ace30e215b9cfbc)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1649169
+https://bugzilla.redhat.com/show_bug.cgi?id=1654732
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_process.c | 26 +++++++++++++++++++++++++-
+ 1 file changed, 25 insertions(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index 4b99fbd835..2d2954ba18 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -1522,9 +1522,13 @@ static int
+ qemuProcessHandleMigrationStatus(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
+                                  virDomainObjPtr vm,
+                                  int status,
+-                                 void *opaque ATTRIBUTE_UNUSED)
++                                 void *opaque)
+ {
+     qemuDomainObjPrivatePtr priv;
++    virQEMUDriverPtr driver = opaque;
++    virObjectEventPtr event = NULL;
++    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
++    int reason;
+ 
+     virObjectLock(vm);
+ 
+@@ -1541,8 +1545,28 @@ qemuProcessHandleMigrationStatus(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
+     priv->job.current->stats.mig.status = status;
+     virDomainObjBroadcast(vm);
+ 
++    if (status == QEMU_MONITOR_MIGRATION_STATUS_POSTCOPY &&
++        virDomainObjGetState(vm, &reason) == VIR_DOMAIN_PAUSED &&
++        reason == VIR_DOMAIN_PAUSED_MIGRATION) {
++        VIR_DEBUG("Correcting paused state reason for domain %s to %s",
++                  vm->def->name,
++                  virDomainPausedReasonTypeToString(VIR_DOMAIN_PAUSED_POSTCOPY));
++
++        virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_POSTCOPY);
++        event = virDomainEventLifecycleNewFromObj(vm,
++                                                  VIR_DOMAIN_EVENT_SUSPENDED,
++                                                  VIR_DOMAIN_EVENT_SUSPENDED_POSTCOPY);
++
++        if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0) {
++            VIR_WARN("Unable to save status on vm %s after state change",
++                     vm->def->name);
++        }
++    }
++
+  cleanup:
+     virObjectUnlock(vm);
++    virObjectEventStateQueue(driver->domainEventState, event);
++    virObjectUnref(cfg);
+     return 0;
+ }
+ 
+-- 
+2.19.2
+
diff --git a/SOURCES/libvirt-qemu-Fix-probing-of-AMD-SEV-support.patch b/SOURCES/libvirt-qemu-Fix-probing-of-AMD-SEV-support.patch
new file mode 100644
index 0000000..41992b4
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Fix-probing-of-AMD-SEV-support.patch
@@ -0,0 +1,143 @@
+From fb28fc398e318509452a50f59d78d90584ca0c27 Mon Sep 17 00:00:00 2001
+Message-Id: <fb28fc398e318509452a50f59d78d90584ca0c27@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Mon, 20 Aug 2018 17:18:52 +0200
+Subject: [PATCH] qemu: Fix probing of AMD SEV support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+So the procedure to detect SEV support works like this:
+1) we detect that sev-guest is among the QOM types and set the cap flag
+2) we probe the monitor for SEV support
+    - this is tricky, because QEMU with compiled SEV support will always
+    report -object sev-guest and query-sev-capabilities command, that
+    however doesn't mean SEV is supported
+3) depending on what the monitor returned, we either keep or clear the
+capability flag for SEV
+
+Commit a349c6c21c6 added an explicit check for "GenericError" in the
+monitor reply to prevent libvirtd to spam logs about missing
+'query-sev-capabilities' command. At the same time though, it returned
+success in this case which means that we didn't clear the capability
+flag afterwards and happily formatted SEV into qemuCaps. Therefore,
+adjust all the relevant callers to handle -1 on errors, 0 on SEV being
+unsupported and 1 on SEV being supported.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Acked-by: Peter Krempa <pkrempa@redhat.com>
+(cherry picked from commit 764491c9dddf063292adf1433769ccccb1a50db6)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1612009
+https://bugzilla.redhat.com/show_bug.cgi?id=1619150
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_capabilities.c                  | 15 ++++++++++----
+ src/qemu/qemu_monitor_json.c                  | 20 +++++++++++++++----
+ .../caps_3.0.0.x86_64.xml                     |  1 -
+ 3 files changed, 27 insertions(+), 9 deletions(-)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index 0fb800589a..55024ad735 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -2695,18 +2695,20 @@ virQEMUCapsProbeQMPGICCapabilities(virQEMUCapsPtr qemuCaps,
+ }
+ 
+ 
++/* Returns -1 on error, 0 if SEV is not supported, 1 if SEV is supported */
+ static int
+ virQEMUCapsProbeQMPSEVCapabilities(virQEMUCapsPtr qemuCaps,
+                                    qemuMonitorPtr mon)
+ {
++    int rc = -1;
+     virSEVCapability *caps = NULL;
+ 
+-    if (qemuMonitorGetSEVCapabilities(mon, &caps) < 0)
+-        return -1;
++    if ((rc = qemuMonitorGetSEVCapabilities(mon, &caps)) <= 0)
++        return rc;
+ 
+     virSEVCapabilitiesFree(qemuCaps->sevCapabilities);
+     qemuCaps->sevCapabilities = caps;
+-    return 0;
++    return rc;
+ }
+ 
+ 
+@@ -4116,7 +4118,12 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
+ 
+     /* Probe for SEV capabilities */
+     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SEV_GUEST)) {
+-        if (virQEMUCapsProbeQMPSEVCapabilities(qemuCaps, mon) < 0)
++        int rc = virQEMUCapsProbeQMPSEVCapabilities(qemuCaps, mon);
++
++        if (rc < 0)
++            goto cleanup;
++
++        if (rc == 0)
+             virQEMUCapsClear(qemuCaps, QEMU_CAPS_SEV_GUEST);
+     }
+ 
+diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
+index 66c525ed0c..8199556166 100644
+--- a/src/qemu/qemu_monitor_json.c
++++ b/src/qemu/qemu_monitor_json.c
+@@ -6425,6 +6425,20 @@ qemuMonitorJSONGetGICCapabilities(qemuMonitorPtr mon,
+ }
+ 
+ 
++/**
++ * qemuMonitorJSONGetSEVCapabilities:
++ * @mon: qemu monitor object
++ * @capabilities: pointer to pointer to a SEV capability structure to be filled
++ *
++ * This function queries and fills in AMD's SEV platform-specific data.
++ * Note that from QEMU's POV both -object sev-guest and query-sev-capabilities
++ * can be present even if SEV is not available, which basically leaves us with
++ * checking for JSON "GenericError" in order to differentiate between
++ * compiled-in support and actual SEV support on the platform.
++ *
++ * Returns -1 on error, 0 if SEV is not supported, and 1 if SEV is supported on
++ * the platform.
++ */
+ int
+ qemuMonitorJSONGetSEVCapabilities(qemuMonitorPtr mon,
+                                   virSEVCapability **capabilities)
+@@ -6446,8 +6460,7 @@ qemuMonitorJSONGetSEVCapabilities(qemuMonitorPtr mon,
+     if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
+         goto cleanup;
+ 
+-    /* Both -object sev-guest and query-sev-capabilities can be present
+-     * even if SEV is not available */
++    /* QEMU has only compiled-in support of SEV */
+     if (qemuMonitorJSONHasError(reply, "GenericError")) {
+         ret = 0;
+         goto cleanup;
+@@ -6499,8 +6512,7 @@ qemuMonitorJSONGetSEVCapabilities(qemuMonitorPtr mon,
+     capability->cbitpos = cbitpos;
+     capability->reduced_phys_bits = reduced_phys_bits;
+     VIR_STEAL_PTR(*capabilities, capability);
+-    ret = 0;
+-
++    ret = 1;
+  cleanup:
+     virSEVCapabilitiesFree(capability);
+     virJSONValueFree(cmd);
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+index 4bc7cfeebc..8992d645e7 100644
+--- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+@@ -212,7 +212,6 @@
+   <flag name='tpm-emulator'/>
+   <flag name='mch'/>
+   <flag name='mch.extended-tseg-mbytes'/>
+-  <flag name='sev-guest'/>
+   <flag name='usb-storage.werror'/>
+   <flag name='egl-headless'/>
+   <flag name='vfio-pci.display'/>
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-Fix-setting-global_period-cputune-element.patch b/SOURCES/libvirt-qemu-Fix-setting-global_period-cputune-element.patch
new file mode 100644
index 0000000..095aaa1
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Fix-setting-global_period-cputune-element.patch
@@ -0,0 +1,40 @@
+From 2f149d2853b4c8184ed75c82dd7bda1036e7f571 Mon Sep 17 00:00:00 2001
+Message-Id: <2f149d2853b4c8184ed75c82dd7bda1036e7f571@dist-git>
+From: Katerina Koukiou <kkoukiou@redhat.com>
+Date: Mon, 16 Jul 2018 15:45:17 +0200
+Subject: [PATCH] qemu: Fix setting global_period cputune element
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When VIR_DOMAIN_SCHEDULER_GLOBAL_PERIOD is matched "cputune.global_period"
+should be updated and not "cputune.period".
+
+Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com>
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1600427
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 74b5634b77b388a454303a2be0b4d704e261305f)
+Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_driver.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index 868ef9d406..670651a75d 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -10570,7 +10570,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
+             }
+ 
+             if (persistentDef)
+-                persistentDefCopy->cputune.period = value_ul;
++                persistentDefCopy->cputune.global_period = value_ul;
+ 
+         } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_GLOBAL_QUOTA)) {
+             SCHED_RANGE_CHECK(value_l, VIR_DOMAIN_SCHEDULER_GLOBAL_QUOTA,
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-Format-nested-hv-feature-on-the-command-line.patch b/SOURCES/libvirt-qemu-Format-nested-hv-feature-on-the-command-line.patch
new file mode 100644
index 0000000..751c461
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Format-nested-hv-feature-on-the-command-line.patch
@@ -0,0 +1,68 @@
+From eaa86279ad7a2a0e341b5270060f250e24d47af4 Mon Sep 17 00:00:00 2001
+Message-Id: <eaa86279ad7a2a0e341b5270060f250e24d47af4@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Tue, 4 Dec 2018 16:46:20 +0100
+Subject: [PATCH] qemu: Format nested-hv feature on the command line
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit c54d3d00ae1f9cd3f983d8e8c1def551d6ddf9b7)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1647822
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_command.c                      | 20 ++++++++++++++++++++
+ tests/qemuxml2argvdata/pseries-features.args |  2 +-
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 320ecd902c..c706a4b095 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -7399,6 +7399,26 @@ qemuBuildMachineCommandLine(virCommandPtr cmd,
+         virBufferAsprintf(&buf, ",cap-htm=%s", str);
+     }
+ 
++    if (def->features[VIR_DOMAIN_FEATURE_NESTED_HV] != VIR_TRISTATE_SWITCH_ABSENT) {
++        const char *str;
++
++        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV)) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                           _("Nested HV configuration is not supported by "
++                             "this QEMU binary"));
++            goto cleanup;
++        }
++
++        str = virTristateSwitchTypeToString(def->features[VIR_DOMAIN_FEATURE_NESTED_HV]);
++        if (!str) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                           _("Invalid setting for nested HV state"));
++            goto cleanup;
++        }
++
++        virBufferAsprintf(&buf, ",cap-nested-hv=%s", str);
++    }
++
+     if (cpu && cpu->model &&
+         cpu->mode == VIR_CPU_MODE_HOST_MODEL &&
+         qemuDomainIsPSeries(def) &&
+diff --git a/tests/qemuxml2argvdata/pseries-features.args b/tests/qemuxml2argvdata/pseries-features.args
+index 226d43df44..2b0a2aa93b 100644
+--- a/tests/qemuxml2argvdata/pseries-features.args
++++ b/tests/qemuxml2argvdata/pseries-features.args
+@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \
+ -name guest \
+ -S \
+ -machine pseries,accel=tcg,usb=off,dump-guest-core=off,resize-hpt=required,\
+-cap-hpt-max-page-size=1048576k,cap-htm=on \
++cap-hpt-max-page-size=1048576k,cap-htm=on,cap-nested-hv=off \
+ -m 512 \
+ -smp 1,sockets=1,cores=1,threads=1 \
+ -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-Format-the-HTM-pSeries-feature.patch b/SOURCES/libvirt-qemu-Format-the-HTM-pSeries-feature.patch
new file mode 100644
index 0000000..12ce636
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Format-the-HTM-pSeries-feature.patch
@@ -0,0 +1,102 @@
+From 62e42f5b6d56ac400274695dc3bd6499219e41b7 Mon Sep 17 00:00:00 2001
+Message-Id: <62e42f5b6d56ac400274695dc3bd6499219e41b7@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Tue, 3 Jul 2018 15:25:17 +0200
+Subject: [PATCH] qemu: Format the HTM pSeries feature
+
+This makes the feature fully operational.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1525599
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+
+(cherry picked from commit d4c11171076edfb2e603804e79edf7ccc3cce5dc)
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Acked-by: David Gibson <dgibson@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_command.c                      | 20 ++++++++++++++++++++
+ src/qemu/qemu_domain.c                       | 14 +++++++++++++-
+ tests/qemuxml2argvdata/pseries-features.args |  2 +-
+ 3 files changed, 34 insertions(+), 2 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index c1eefca639..4120e4f983 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -7327,6 +7327,26 @@ qemuBuildMachineCommandLine(virCommandPtr cmd,
+         }
+     }
+ 
++    if (def->features[VIR_DOMAIN_FEATURE_HTM] != VIR_TRISTATE_SWITCH_ABSENT) {
++        const char *str;
++
++        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_PSERIES_CAP_HTM)) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                           _("HTM configuration is not supported by this "
++                             "QEMU binary"));
++            goto cleanup;
++        }
++
++        str = virTristateSwitchTypeToString(def->features[VIR_DOMAIN_FEATURE_HTM]);
++        if (!str) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                           _("Invalid setting for HTM state"));
++            goto cleanup;
++        }
++
++        virBufferAsprintf(&buf, ",cap-htm=%s", str);
++    }
++
+     if (cpu && cpu->model &&
+         cpu->mode == VIR_CPU_MODE_HOST_MODEL &&
+         qemuDomainIsPSeries(def) &&
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 0eacad1e44..3f3bb94685 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -3852,6 +3852,19 @@ qemuDomainDefValidateFeatures(const virDomainDef *def,
+             }
+             break;
+ 
++        case VIR_DOMAIN_FEATURE_HTM:
++            if (def->features[i] != VIR_TRISTATE_SWITCH_ABSENT &&
++                !qemuDomainIsPSeries(def)) {
++                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++                               _("The '%s' feature is not supported for "
++                                 "architecture '%s' or machine type '%s'"),
++                               featureName,
++                               virArchToString(def->os.arch),
++                               def->os.machine);
++                return -1;
++            }
++            break;
++
+         case VIR_DOMAIN_FEATURE_ACPI:
+         case VIR_DOMAIN_FEATURE_APIC:
+         case VIR_DOMAIN_FEATURE_PAE:
+@@ -3865,7 +3878,6 @@ qemuDomainDefValidateFeatures(const virDomainDef *def,
+         case VIR_DOMAIN_FEATURE_PMU:
+         case VIR_DOMAIN_FEATURE_VMPORT:
+         case VIR_DOMAIN_FEATURE_VMCOREINFO:
+-        case VIR_DOMAIN_FEATURE_HTM:
+         case VIR_DOMAIN_FEATURE_LAST:
+             break;
+         }
+diff --git a/tests/qemuxml2argvdata/pseries-features.args b/tests/qemuxml2argvdata/pseries-features.args
+index 12c14715c6..226d43df44 100644
+--- a/tests/qemuxml2argvdata/pseries-features.args
++++ b/tests/qemuxml2argvdata/pseries-features.args
+@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \
+ -name guest \
+ -S \
+ -machine pseries,accel=tcg,usb=off,dump-guest-core=off,resize-hpt=required,\
+-cap-hpt-max-page-size=1048576k \
++cap-hpt-max-page-size=1048576k,cap-htm=on \
+ -m 512 \
+ -smp 1,sockets=1,cores=1,threads=1 \
+ -uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-Ignore-nwfilter-binding-instantiation-issues-during-reconnect.patch b/SOURCES/libvirt-qemu-Ignore-nwfilter-binding-instantiation-issues-during-reconnect.patch
new file mode 100644
index 0000000..1832b8d
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Ignore-nwfilter-binding-instantiation-issues-during-reconnect.patch
@@ -0,0 +1,88 @@
+From d749a84b9728b4c1a46c9e6efbab5732688d03c2 Mon Sep 17 00:00:00 2001
+Message-Id: <d749a84b9728b4c1a46c9e6efbab5732688d03c2@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Sat, 10 Nov 2018 08:50:06 -0500
+Subject: [PATCH] qemu: Ignore nwfilter binding instantiation issues during
+ reconnect
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1648544 (RHEL8)
+https://bugzilla.redhat.com/show_bug.cgi?id=1607202 (RHEL7)
+
+It's essentially stated in the nwfilterBindingDelete that we
+will allow the admin to shoot themselves in the foot by deleting
+the nwfilter binding which then allows them to undefine the
+nwfilter that is in use for the running guest...
+
+However, by allowing this we cause a problem for libvirtd
+restart reconnect processing which would then try to recreate
+the missing binding attempting to use the deleted filter
+resulting in an error and thus shutting the guest down.
+
+So rather than keep adding virDomainConfNWFilterInstantiate
+flags to "ignore" specific error conditions, modify the logic
+to ignore, but VIR_WARN errors other than ignoreExists. This
+will at least allow the guest to not shutdown for only nwfilter
+binding errors that we can now perhaps recover from since we
+have the binding create/delete capability.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+ACKed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 9e52c6496650d1412662a9e6cf98301141fbbbca)
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/qemu/qemu_process.c | 24 ++++++++++++++++--------
+ 1 file changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index e4b19b938c..8ba14abfa4 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -3136,20 +3136,29 @@ qemuProcessNotifyNets(virDomainDefPtr def)
+     }
+ }
+ 
+-static int
+-qemuProcessFiltersInstantiate(virDomainDefPtr def, bool ignoreExists)
++/* Attempt to instantiate the filters. Ignore failures because it's
++ * possible that someone deleted a filter binding and the associated
++ * filter while the guest was running and we don't want that action
++ * to cause failure to keep the guest running during the reconnection
++ * processing. Nor do we necessarily want other failures to do the
++ * same. We'll just log the error conditions other than of course
++ * ignoreExists possibility (e.g. the true flag) */
++static void
++qemuProcessFiltersInstantiate(virDomainDefPtr def)
+ {
+     size_t i;
+ 
+     for (i = 0; i < def->nnets; i++) {
+         virDomainNetDefPtr net = def->nets[i];
+         if ((net->filter) && (net->ifname)) {
+-            if (virDomainConfNWFilterInstantiate(def->name, def->uuid, net, ignoreExists) < 0)
+-                return 1;
++            if (virDomainConfNWFilterInstantiate(def->name, def->uuid, net,
++                                                 true) < 0) {
++                VIR_WARN("filter '%s' instantiation for '%s' failed '%s'",
++                         net->filter, net->ifname, virGetLastErrorMessage());
++                virResetLastError();
++            }
+         }
+     }
+-
+-    return 0;
+ }
+ 
+ static int
+@@ -7782,8 +7791,7 @@ qemuProcessReconnect(void *opaque)
+ 
+     qemuProcessNotifyNets(obj->def);
+ 
+-    if (qemuProcessFiltersInstantiate(obj->def, true))
+-        goto error;
++    qemuProcessFiltersInstantiate(obj->def);
+ 
+     if (qemuProcessRefreshDisks(driver, obj, QEMU_ASYNC_JOB_NONE) < 0)
+         goto error;
+-- 
+2.19.2
+
diff --git a/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV.patch b/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV.patch
new file mode 100644
index 0000000..e426f4b
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV.patch
@@ -0,0 +1,109 @@
+From 445b61e0c0f68d91a5e7bad7fb12b82005dd0e85 Mon Sep 17 00:00:00 2001
+Message-Id: <445b61e0c0f68d91a5e7bad7fb12b82005dd0e85@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Tue, 4 Dec 2018 16:46:18 +0100
+Subject: [PATCH] qemu: Introduce QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit 0029eace520bfc0cbb1b176611304401ea9eae8f)
+
+Conflicts in
+
+  src/qemu/qemu_capabilities.c
+  src/qemu/qemu_capabilities.h
+
+because we're missing
+
+  29ad952f7e qemu: Introduce zPCI capability
+  21b18ea5d9 qemu: add memory-backend-memfd capability check
+  a6fd5b596a qemu: check memory-backend-memfd.hugetlb capability
+  9aec374b01 qemu: Detect whether iothread polling is supported
+
+downstream.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1647822
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_capabilities.c                    | 2 ++
+ src/qemu/qemu_capabilities.h                    | 1 +
+ tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 1 +
+ tests/qemuxml2argvtest.c                        | 1 +
+ tests/qemuxml2xmltest.c                         | 1 +
+ 5 files changed, 6 insertions(+)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index feef102874..57b1b99076 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -508,6 +508,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
+               /* 315 */
+               "vfio-pci.display",
+               "vfio-ap",
++              "machine.pseries.cap-nested-hv",
+     );
+ 
+ 
+@@ -1439,6 +1440,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMemoryBackendFile[] =
+ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsSPAPRMachine[] = {
+     { "cap-hpt-max-page-size", QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE },
+     { "cap-htm", QEMU_CAPS_MACHINE_PSERIES_CAP_HTM },
++    { "cap-nested-hv", QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV },
+ };
+ 
+ static virQEMUCapsObjectTypeProps virQEMUCapsObjectProps[] = {
+diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
+index 1a9e5386a8..0c06081107 100644
+--- a/src/qemu/qemu_capabilities.h
++++ b/src/qemu/qemu_capabilities.h
+@@ -492,6 +492,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
+     /* 315 */
+     QEMU_CAPS_VFIO_PCI_DISPLAY, /* -device vfio-pci.display */
+     QEMU_CAPS_DEVICE_VFIO_AP, /* -device vfio-ap */
++    QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV, /* -machine pseries.cap-nested-hv */
+ 
+     QEMU_CAPS_LAST /* this must always be the last item */
+ } virQEMUCapsFlags;
+diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
+index bdd339c54a..279e946e2a 100644
+--- a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
++++ b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
+@@ -171,6 +171,7 @@
+   <flag name='usb-storage.werror'/>
+   <flag name='egl-headless'/>
+   <flag name='vfio-pci.display'/>
++  <flag name='machine.pseries.cap-nested-hv'/>
+   <version>3000091</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>439018</microcodeVersion>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 13e95fe28a..0908bc5d08 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -1886,6 +1886,7 @@ mymain(void)
+             QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
+             QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
+             QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
++            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
+             QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
+     DO_TEST_FAILURE("pseries-features",
+                     QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index b76410b2c1..db088fff6b 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -627,6 +627,7 @@ mymain(void)
+             QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
+             QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
+             QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
++            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
+             QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
+ 
+     DO_TEST("pseries-serial-native",
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-Introduce-a-new-graphics-display-type-headless.patch b/SOURCES/libvirt-qemu-Introduce-a-new-graphics-display-type-headless.patch
new file mode 100644
index 0000000..b0d7919
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Introduce-a-new-graphics-display-type-headless.patch
@@ -0,0 +1,908 @@
+From d6226c73df11563b6ea1ae1454ca57561b3ea665 Mon Sep 17 00:00:00 2001
+Message-Id: <d6226c73df11563b6ea1ae1454ca57561b3ea665@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:58 +0200
+Subject: [PATCH] qemu: Introduce a new graphics display type 'headless'
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since 2.10 QEMU supports a new display type egl-headless which uses the
+drm nodes for OpenGL rendering copying back the rendered bits back to
+QEMU into a dma-buf which can be accessed by standard "display" apps
+like VNC or SPICE. Although this display type can be used on its own,
+for any practical use case it makes sense to pair it with either VNC or
+SPICE display. The clear benefit of this display is that VNC gains
+OpenGL support, which it natively doesn't have, and SPICE gains remote
+OpenGL support (native OpenGL support only works locally through a UNIX
+socket, i.e. listen type=socket/none).
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit d8266ebe1615c4b043db6b8d486465722cdd0ef8)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/formatdomain.html.in                     | 33 +++++++++-
+ docs/schemas/domaincommon.rng                 |  3 +
+ src/conf/domain_conf.c                        |  6 +-
+ src/conf/domain_conf.h                        |  1 +
+ src/libxl/libxl_conf.c                        |  1 +
+ src/qemu/qemu_command.c                       | 14 ++++-
+ src/qemu/qemu_domain.c                        | 60 ++++++++++++++++++-
+ src/qemu/qemu_driver.c                        |  2 +
+ src/qemu/qemu_hotplug.c                       |  1 +
+ src/qemu/qemu_process.c                       |  4 ++
+ src/vmx/vmx.c                                 |  1 +
+ tests/domaincapsschemadata/full.xml           |  1 +
+ .../graphics-egl-headless.args                | 26 ++++++++
+ .../graphics-egl-headless.xml                 | 31 ++++++++++
+ .../graphics-sdl-egl-headless.xml             | 35 +++++++++++
+ .../graphics-spice-egl-headless.args          | 31 ++++++++++
+ .../graphics-spice-egl-headless.xml           | 36 +++++++++++
+ .../graphics-spice-invalid-egl-headless.xml   | 37 ++++++++++++
+ .../graphics-vnc-egl-headless.args            | 28 +++++++++
+ .../graphics-vnc-egl-headless.xml             | 37 ++++++++++++
+ tests/qemuxml2argvtest.c                      | 17 ++++++
+ .../graphics-spice-egl-headless.xml           | 44 ++++++++++++++
+ .../graphics-vnc-egl-headless.xml             | 42 +++++++++++++
+ tests/qemuxml2xmltest.c                       |  2 +
+ 24 files changed, 488 insertions(+), 5 deletions(-)
+ create mode 100644 tests/qemuxml2argvdata/graphics-egl-headless.args
+ create mode 100644 tests/qemuxml2argvdata/graphics-egl-headless.xml
+ create mode 100644 tests/qemuxml2argvdata/graphics-sdl-egl-headless.xml
+ create mode 100644 tests/qemuxml2argvdata/graphics-spice-egl-headless.args
+ create mode 100644 tests/qemuxml2argvdata/graphics-spice-egl-headless.xml
+ create mode 100644 tests/qemuxml2argvdata/graphics-spice-invalid-egl-headless.xml
+ create mode 100644 tests/qemuxml2argvdata/graphics-vnc-egl-headless.args
+ create mode 100644 tests/qemuxml2argvdata/graphics-vnc-egl-headless.xml
+ create mode 100644 tests/qemuxml2xmloutdata/graphics-spice-egl-headless.xml
+ create mode 100644 tests/qemuxml2xmloutdata/graphics-vnc-egl-headless.xml
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index a3afe137bf..9dd22554ad 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -6299,7 +6299,8 @@ qemu-kvm -net nic,model=? /dev/null
+         <p>
+           The <code>graphics</code> element has a mandatory <code>type</code>
+           attribute which takes the value <code>sdl</code>, <code>vnc</code>,
+-          <code>spice</code>, <code>rdp</code> or <code>desktop</code>:
++          <code>spice</code>, <code>rdp</code>, <code>desktop</code> or
++          <code>egl-headless</code>:
+         </p>
+         <dl>
+           <dt><code>sdl</code></dt>
+@@ -6358,6 +6359,11 @@ qemu-kvm -net nic,model=? /dev/null
+               auto-allocation and <code>autoport</code> having no effect due to
+               security reasons) <span class="since">Since 1.0.6</span>.
+             </p>
++            <p>
++              Although VNC doesn't support OpenGL natively, it can be paired
++              with graphics type <code>egl-headless</code> (see below) which
++              will instruct QEMU to open and use drm nodes for OpenGL rendering.
++            </p>
+           </dd>
+           <dt><code>spice</code> <span class="since">Since 0.8.6</span></dt>
+           <dd>
+@@ -6463,6 +6469,12 @@ qemu-kvm -net nic,model=? /dev/null
+               You can enable or disable OpenGL support explicitly with
+               the <code>gl</code> element, by setting the <code>enable</code>
+               property. (QEMU only, <span class="since">since 1.3.3</span>).
++              Note that this only works locally, since this requires usage of
++              UNIX sockets, i.e. using <code>listen</code> types 'socket' or
++              'none'. For accelerated OpenGL with remote support, consider
++              pairing this element with type <code>egl-headless</code>
++              (see below). However, this will deliver weaker performance
++              compared to native Spice OpenGL support.
+             </p>
+             <p>
+               By default, QEMU will pick the first available GPU DRM render node.
+@@ -6498,6 +6510,25 @@ qemu-kvm -net nic,model=? /dev/null
+               <code>fullscreen</code>.
+             </p>
+           </dd>
++          <dt><code>egl-headless</code><span class="since">Since 4.6.0</span></dt>
++          <dd>
++            <p>
++              This display type provides support for an OpenGL accelerated
++              display accessible both locally and remotely (for comparison,
++              Spice's native OpenGL support only works locally using UNIX
++              sockets at the moment, but has better performance). Since this
++              display type doesn't provide any window or graphical console like
++              the other types, for practical reasons it should be paired with
++              either <code>vnc</code> or <code>spice</code> graphics types.
++              This display type is only supported by QEMU domains
++              (needs QEMU <span class="since">2.10</span> or newer) and doesn't
++              accept any attributes.
++            </p>
++            <pre>
++&lt;graphics type='spice' autoport='yes'/&gt;
++&lt;graphics type='egl-headless'/&gt;
++            </pre>
++          </dd>
+         </dl>
+       </dd>
+     </dl>
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index f24a56392a..157726752c 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -3366,6 +3366,9 @@
+             </attribute>
+           </optional>
+         </group>
++        <attribute name="type">
++          <value>egl-headless</value>
++        </attribute>
+       </choice>
+     </element>
+   </define>
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index db8e17dac4..fa4dfafcff 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -615,7 +615,8 @@ VIR_ENUM_IMPL(virDomainGraphics, VIR_DOMAIN_GRAPHICS_TYPE_LAST,
+               "vnc",
+               "rdp",
+               "desktop",
+-              "spice")
++              "spice",
++              "egl-headless")
+ 
+ VIR_ENUM_IMPL(virDomainGraphicsListen, VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST,
+               "none",
+@@ -1426,6 +1427,7 @@ void virDomainGraphicsDefFree(virDomainGraphicsDefPtr def)
+         virDomainGraphicsAuthDefClear(&def->data.spice.auth);
+         break;
+ 
++    case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+     case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+         break;
+     }
+@@ -14172,6 +14174,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node,
+         if (virDomainGraphicsDefParseXMLSpice(def, node, ctxt, flags) < 0)
+             goto error;
+         break;
++    case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+     case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+         break;
+     }
+@@ -26404,6 +26407,7 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
+         virDomainGraphicsAuthDefFormatAttr(buf, &def->data.spice.auth, flags);
+         break;
+ 
++    case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+     case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+         break;
+     }
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index 0f10e242fd..26f75b15d0 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -1473,6 +1473,7 @@ typedef enum {
+     VIR_DOMAIN_GRAPHICS_TYPE_RDP,
+     VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP,
+     VIR_DOMAIN_GRAPHICS_TYPE_SPICE,
++    VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS,
+ 
+     VIR_DOMAIN_GRAPHICS_TYPE_LAST
+ } virDomainGraphicsType;
+diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
+index 452a77f3b8..cda4eb9d31 100644
+--- a/src/libxl/libxl_conf.c
++++ b/src/libxl/libxl_conf.c
+@@ -1441,6 +1441,7 @@ libxlMakeVfb(virPortAllocatorRangePtr graphicsports,
+         case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+         case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
+         case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
++        case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+         case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+             break;
+     }
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index fed4f8faf9..8915040c6a 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -8212,6 +8212,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
+     return -1;
+ }
+ 
++
+ static int
+ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg,
+                              virCommandPtr cmd,
+@@ -8241,6 +8242,11 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg,
+                                                   qemuCaps, graphics) < 0)
+                 return -1;
+ 
++            break;
++        case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
++            virCommandAddArg(cmd, "-display");
++            virCommandAddArg(cmd, "egl-headless");
++
+             break;
+         case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+         case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
+@@ -10068,6 +10074,7 @@ qemuBuildCommandLineValidate(virQEMUDriverPtr driver,
+     int sdl = 0;
+     int vnc = 0;
+     int spice = 0;
++    int egl_headless = 0;
+ 
+     if (!virQEMUDriverIsPrivileged(driver)) {
+         /* If we have no cgroups then we can have no tunings that
+@@ -10109,6 +10116,9 @@ qemuBuildCommandLineValidate(virQEMUDriverPtr driver,
+         case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
+             ++spice;
+             break;
++        case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
++            ++egl_headless;
++            break;
+         case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+         case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
+         case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+@@ -10116,10 +10126,10 @@ qemuBuildCommandLineValidate(virQEMUDriverPtr driver,
+         }
+     }
+ 
+-    if (sdl > 1 || vnc > 1 || spice > 1) {
++    if (sdl > 1 || vnc > 1 || spice > 1 || egl_headless > 1) {
+         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                        _("only 1 graphics device of each type "
+-                         "(sdl, vnc, spice) is supported"));
++                         "(sdl, vnc, spice, headless) is supported"));
+         return -1;
+     }
+ 
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index a42a6df91b..9498594857 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -5502,6 +5502,60 @@ qemuDomainDeviceDefValidateTPM(virDomainTPMDef *tpm,
+ }
+ 
+ 
++static int
++qemuDomainDeviceDefValidateGraphics(const virDomainGraphicsDef *graphics,
++                                    const virDomainDef *def,
++                                    virQEMUCapsPtr qemuCaps)
++{
++    bool have_egl_headless = false;
++    size_t i;
++
++    for (i = 0; i < def->ngraphics; i++) {
++        graphics = def->graphics[i];
++
++        if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS) {
++            have_egl_headless = true;
++            break;
++        }
++    }
++
++    /* Only VNC and SPICE can be paired with egl-headless, the other types
++     * either don't make sense to pair with egl-headless or aren't even
++     * supported by QEMU.
++     */
++    if (have_egl_headless) {
++        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS)) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                           _("egl-headless display is not supported with this "
++                             "QEMU binary"));
++            return -1;
++        }
++
++        if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS &&
++            graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
++            graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                           _("graphics type 'egl-headless' is only supported "
++                             "with one of: 'vnc', 'spice' graphics types"));
++            return -1;
++        }
++
++        /* '-spice gl=on' and '-display egl-headless' are mutually
++         * exclusive
++         */
++        if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
++            graphics->data.spice.gl == VIR_TRISTATE_BOOL_YES) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                           _("multiple OpenGL displays are not supported "
++                             "by QEMU"));
++            return -1;
++        }
++    }
++
++    return 0;
++}
++
++
+ static int
+ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
+                             const virDomainDef *def,
+@@ -5569,11 +5623,15 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
+         ret = qemuDomainDeviceDefValidateTPM(dev->data.tpm, def);
+         break;
+ 
++    case VIR_DOMAIN_DEVICE_GRAPHICS:
++        ret = qemuDomainDeviceDefValidateGraphics(dev->data.graphics, def,
++                                                  qemuCaps);
++        break;
++
+     case VIR_DOMAIN_DEVICE_LEASE:
+     case VIR_DOMAIN_DEVICE_FS:
+     case VIR_DOMAIN_DEVICE_INPUT:
+     case VIR_DOMAIN_DEVICE_SOUND:
+-    case VIR_DOMAIN_DEVICE_GRAPHICS:
+     case VIR_DOMAIN_DEVICE_HUB:
+     case VIR_DOMAIN_DEVICE_MEMBALLOON:
+     case VIR_DOMAIN_DEVICE_NVRAM:
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index 670651a75d..3158f217fa 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -18118,6 +18118,7 @@ qemuDomainOpenGraphics(virDomainPtr dom,
+     case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
+     case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+     case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
++    case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                        _("Can only open VNC or SPICE graphics backends, not %s"),
+                        virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
+@@ -18186,6 +18187,7 @@ qemuDomainOpenGraphicsFD(virDomainPtr dom,
+     case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
+     case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+     case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
++    case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                        _("Can only open VNC or SPICE graphics backends, not %s"),
+                        virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
+diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
+index 91a751a2fe..053ddb14ec 100644
+--- a/src/qemu/qemu_hotplug.c
++++ b/src/qemu/qemu_hotplug.c
+@@ -3699,6 +3699,7 @@ qemuDomainChangeGraphics(virQEMUDriverPtr driver,
+     case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
+     case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+     case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
++    case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+         virReportError(VIR_ERR_INTERNAL_ERROR,
+                        _("unable to change config on '%s' graphics type"), type);
+         break;
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index c903a8e5c8..a4b1f97df5 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -4467,6 +4467,7 @@ qemuProcessGraphicsReservePorts(virDomainGraphicsDefPtr graphics,
+     case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
+     case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+     case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
++    case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+     case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+         break;
+     }
+@@ -4505,6 +4506,7 @@ qemuProcessGraphicsAllocatePorts(virQEMUDriverPtr driver,
+     case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
+     case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+     case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
++    case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+     case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+         break;
+     }
+@@ -4657,6 +4659,7 @@ qemuProcessGraphicsSetupListen(virQEMUDriverPtr driver,
+     case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
+     case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+     case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
++    case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+     case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+         break;
+     }
+@@ -4944,6 +4947,7 @@ qemuProcessStartValidateGraphics(virDomainObjPtr vm)
+         case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
+         case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+         case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
++        case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+         case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+             break;
+         }
+diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
+index fe24b060d7..937bf0c96b 100644
+--- a/src/vmx/vmx.c
++++ b/src/vmx/vmx.c
+@@ -3282,6 +3282,7 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe
+           case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+           case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
+           case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
++          case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
+             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                            _("Unsupported graphics type '%s'"),
+                            virDomainGraphicsTypeToString(def->graphics[i]->type));
+diff --git a/tests/domaincapsschemadata/full.xml b/tests/domaincapsschemadata/full.xml
+index d3faf38da0..154c4a6fe9 100644
+--- a/tests/domaincapsschemadata/full.xml
++++ b/tests/domaincapsschemadata/full.xml
+@@ -59,6 +59,7 @@
+         <value>rdp</value>
+         <value>desktop</value>
+         <value>spice</value>
++        <value>egl-headless</value>
+       </enum>
+     </graphics>
+     <video supported='yes'>
+diff --git a/tests/qemuxml2argvdata/graphics-egl-headless.args b/tests/qemuxml2argvdata/graphics-egl-headless.args
+new file mode 100644
+index 0000000000..fdf540ddfc
+--- /dev/null
++++ b/tests/qemuxml2argvdata/graphics-egl-headless.args
+@@ -0,0 +1,26 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++/usr/bin/qemu-system-i686 \
++-name QEMUGuest1 \
++-S \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
++server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot c \
++-usb \
++-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
++-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
++-display egl-headless \
++-vga cirrus
+diff --git a/tests/qemuxml2argvdata/graphics-egl-headless.xml b/tests/qemuxml2argvdata/graphics-egl-headless.xml
+new file mode 100644
+index 0000000000..7b001cd2eb
+--- /dev/null
++++ b/tests/qemuxml2argvdata/graphics-egl-headless.xml
+@@ -0,0 +1,31 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219100</memory>
++  <currentMemory unit='KiB'>219100</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'/>
++    <controller type='ide' index='0'/>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <graphics type='egl-headless'/>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvdata/graphics-sdl-egl-headless.xml b/tests/qemuxml2argvdata/graphics-sdl-egl-headless.xml
+new file mode 100644
+index 0000000000..955dfeb3c2
+--- /dev/null
++++ b/tests/qemuxml2argvdata/graphics-sdl-egl-headless.xml
+@@ -0,0 +1,35 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'/>
++    <controller type='ide' index='0'/>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <graphics type='sdl' display=':0.1' xauth='/root/.Xauthority'/>
++    <graphics type='egl-headless'/>
++    <video>
++      <model type='vga' vram='16384' heads='1'/>
++    </video>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvdata/graphics-spice-egl-headless.args b/tests/qemuxml2argvdata/graphics-spice-egl-headless.args
+new file mode 100644
+index 0000000000..4886ee05f6
+--- /dev/null
++++ b/tests/qemuxml2argvdata/graphics-spice-egl-headless.args
+@@ -0,0 +1,31 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=spice \
++/usr/bin/qemu-system-i686 \
++-name QEMUGuest1 \
++-S \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
++server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot c \
++-usb \
++-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
++-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
++-spice port=5903,addr=127.0.0.1 \
++-display egl-headless \
++-vga qxl \
++-global qxl-vga.ram_size=67108864 \
++-global qxl-vga.vram_size=33554432 \
++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
+diff --git a/tests/qemuxml2argvdata/graphics-spice-egl-headless.xml b/tests/qemuxml2argvdata/graphics-spice-egl-headless.xml
+new file mode 100644
+index 0000000000..fafae13a0f
+--- /dev/null
++++ b/tests/qemuxml2argvdata/graphics-spice-egl-headless.xml
+@@ -0,0 +1,36 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'/>
++    <controller type='ide' index='0'/>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <graphics type='spice' port='5903' autoport='no' listen='127.0.0.1'>
++      <listen type='address' address='127.0.0.1'/>
++    </graphics>
++    <graphics type='egl-headless'/>
++    <video>
++      <model type='qxl' ram='65536' vram='32768' vgamem='8192' heads='1'/>
++    </video>
++    <memballoon model='virtio'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvdata/graphics-spice-invalid-egl-headless.xml b/tests/qemuxml2argvdata/graphics-spice-invalid-egl-headless.xml
+new file mode 100644
+index 0000000000..25ae61cef6
+--- /dev/null
++++ b/tests/qemuxml2argvdata/graphics-spice-invalid-egl-headless.xml
+@@ -0,0 +1,37 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'/>
++    <controller type='ide' index='0'/>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <graphics type='spice'>
++      <listen type='none'/>
++      <gl enable='yes'/>
++    </graphics>
++    <graphics type='egl-headless'/>
++    <video>
++      <model type='qxl' ram='65536' vram='32768' vgamem='8192' heads='1'/>
++    </video>
++    <memballoon model='virtio'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvdata/graphics-vnc-egl-headless.args b/tests/qemuxml2argvdata/graphics-vnc-egl-headless.args
+new file mode 100644
+index 0000000000..2d2b3cf0fb
+--- /dev/null
++++ b/tests/qemuxml2argvdata/graphics-vnc-egl-headless.args
+@@ -0,0 +1,28 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name QEMUGuest1 \
++-S \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
++server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot c \
++-usb \
++-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
++-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
++-vnc '[2001:1:2:3:4:5:1234:1234]:3' \
++-display egl-headless \
++-vga cirrus
+diff --git a/tests/qemuxml2argvdata/graphics-vnc-egl-headless.xml b/tests/qemuxml2argvdata/graphics-vnc-egl-headless.xml
+new file mode 100644
+index 0000000000..570cf2e50f
+--- /dev/null
++++ b/tests/qemuxml2argvdata/graphics-vnc-egl-headless.xml
+@@ -0,0 +1,37 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219100</memory>
++  <currentMemory unit='KiB'>219100</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'/>
++    <controller type='ide' index='0'/>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <graphics type='vnc' port='5903' autoport='no' listen='2001:1:2:3:4:5:1234:1234'>
++      <listen type='address' address='2001:1:2:3:4:5:1234:1234'/>
++    </graphics>
++    <graphics type='egl-headless'/>
++    <video>
++      <model type='cirrus' vram='16384' heads='1'/>
++    </video>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 3be5af03aa..848e40440a 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -1167,6 +1167,10 @@ mymain(void)
+     DO_TEST_PARSE_ERROR("disk-scsi-incompatible-address",
+                         QEMU_CAPS_VIRTIO_SCSI);
+ 
++    DO_TEST("graphics-egl-headless",
++            QEMU_CAPS_EGL_HEADLESS,
++            QEMU_CAPS_DEVICE_CIRRUS_VGA);
++
+     DO_TEST("graphics-vnc", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
+     DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
+     DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET,
+@@ -1198,9 +1202,14 @@ mymain(void)
+     driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
+     VIR_FREE(driver.config->vncSASLdir);
+     VIR_FREE(driver.config->vncTLSx509certdir);
++    DO_TEST("graphics-vnc-egl-headless",
++            QEMU_CAPS_VNC,
++            QEMU_CAPS_EGL_HEADLESS,
++            QEMU_CAPS_DEVICE_CIRRUS_VGA);
+ 
+     DO_TEST("graphics-sdl",
+             QEMU_CAPS_DEVICE_VGA);
++    DO_TEST_FAILURE("graphics-sdl-egl-headless", NONE);
+     DO_TEST("graphics-sdl-fullscreen",
+             QEMU_CAPS_DEVICE_CIRRUS_VGA);
+     DO_TEST("graphics-spice",
+@@ -1255,6 +1264,14 @@ mymain(void)
+             QEMU_CAPS_SPICE_UNIX,
+             QEMU_CAPS_DEVICE_CIRRUS_VGA);
+     driver.config->spiceAutoUnixSocket = false;
++    DO_TEST("graphics-spice-egl-headless",
++            QEMU_CAPS_SPICE,
++            QEMU_CAPS_EGL_HEADLESS,
++            QEMU_CAPS_DEVICE_QXL);
++    DO_TEST_FAILURE("graphics-spice-invalid-egl-headless",
++                    QEMU_CAPS_SPICE,
++                    QEMU_CAPS_EGL_HEADLESS,
++                    QEMU_CAPS_DEVICE_QXL);
+ 
+     DO_TEST("input-usbmouse", NONE);
+     DO_TEST("input-usbtablet", NONE);
+diff --git a/tests/qemuxml2xmloutdata/graphics-spice-egl-headless.xml b/tests/qemuxml2xmloutdata/graphics-spice-egl-headless.xml
+new file mode 100644
+index 0000000000..6d96264914
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/graphics-spice-egl-headless.xml
+@@ -0,0 +1,44 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='ide' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <graphics type='spice' port='5903' autoport='no' listen='127.0.0.1'>
++      <listen type='address' address='127.0.0.1'/>
++    </graphics>
++    <graphics type='egl-headless'/>
++    <video>
++      <model type='qxl' ram='65536' vram='32768' vgamem='8192' heads='1' primary='yes'/>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
++    </video>
++    <memballoon model='virtio'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
++    </memballoon>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2xmloutdata/graphics-vnc-egl-headless.xml b/tests/qemuxml2xmloutdata/graphics-vnc-egl-headless.xml
+new file mode 100644
+index 0000000000..4155c10397
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/graphics-vnc-egl-headless.xml
+@@ -0,0 +1,42 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219100</memory>
++  <currentMemory unit='KiB'>219100</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest1'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='ide' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <graphics type='vnc' port='5903' autoport='no' listen='2001:1:2:3:4:5:1234:1234'>
++      <listen type='address' address='2001:1:2:3:4:5:1234:1234'/>
++    </graphics>
++    <graphics type='egl-headless'/>
++    <video>
++      <model type='cirrus' vram='16384' heads='1' primary='yes'/>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
++    </video>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index bbb995656e..fa57221d62 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -417,6 +417,7 @@ mymain(void)
+     cfg->vncAutoUnixSocket = false;
+     DO_TEST("graphics-vnc-socket", NONE);
+     DO_TEST("graphics-vnc-auto-socket", NONE);
++    DO_TEST("graphics-vnc-egl-headless", NONE);
+ 
+     DO_TEST("graphics-sdl", NONE);
+     DO_TEST("graphics-sdl-fullscreen", NONE);
+@@ -428,6 +429,7 @@ mymain(void)
+     cfg->spiceAutoUnixSocket = true;
+     DO_TEST("graphics-spice-auto-socket-cfg", NONE);
+     cfg->spiceAutoUnixSocket = false;
++    DO_TEST("graphics-spice-egl-headless", NONE);
+ 
+     DO_TEST("input-usbmouse", NONE);
+     DO_TEST("input-usbtablet", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-Map-running-reason-to-resume-event-detail.patch b/SOURCES/libvirt-qemu-Map-running-reason-to-resume-event-detail.patch
new file mode 100644
index 0000000..2cc856c
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Map-running-reason-to-resume-event-detail.patch
@@ -0,0 +1,121 @@
+From 281b3fe785078497e4bb3156fe4da9af91f204c2 Mon Sep 17 00:00:00 2001
+Message-Id: <281b3fe785078497e4bb3156fe4da9af91f204c2@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Tue, 11 Sep 2018 15:13:08 +0200
+Subject: [PATCH] qemu: Map running reason to resume event detail
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Thanks to the previous commit the RESUME event handler knows what reason
+should be used when changing the domain state to VIR_DOMAIN_RUNNING, but
+the emitted VIR_DOMAIN_EVENT_RESUMED event still uses a generic
+VIR_DOMAIN_EVENT_RESUMED_UNPAUSED detail. Luckily, the event detail can
+be easily deduced from the running reason, which saves us from having to
+pass one more value to the handler.
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 8ae9b49f5a4a02f57a1dfa20d4fe04c3d40a4665)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1634758
+https://bugzilla.redhat.com/show_bug.cgi?id=1634759
+
+Conflicts:
+	src/qemu/qemu_domain.c
+	src/qemu/qemu_domain.h
+            - nodenames code is not backported
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_domain.c  | 29 +++++++++++++++++++++++++++++
+ src/qemu/qemu_domain.h  |  3 +++
+ src/qemu/qemu_process.c | 11 +++++++----
+ 3 files changed, 39 insertions(+), 4 deletions(-)
+
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 17be6e5537..d80f9b393e 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -13149,3 +13149,32 @@ qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivatePtr priv)
+ 
+     return ret;
+ }
++
++
++virDomainEventResumedDetailType
++qemuDomainRunningReasonToResumeEvent(virDomainRunningReason reason)
++{
++    switch (reason) {
++    case VIR_DOMAIN_RUNNING_RESTORED:
++    case VIR_DOMAIN_RUNNING_FROM_SNAPSHOT:
++        return VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT;
++
++    case VIR_DOMAIN_RUNNING_MIGRATED:
++    case VIR_DOMAIN_RUNNING_MIGRATION_CANCELED:
++        return VIR_DOMAIN_EVENT_RESUMED_MIGRATED;
++
++    case VIR_DOMAIN_RUNNING_POSTCOPY:
++        return VIR_DOMAIN_EVENT_RESUMED_POSTCOPY;
++
++    case VIR_DOMAIN_RUNNING_UNKNOWN:
++    case VIR_DOMAIN_RUNNING_SAVE_CANCELED:
++    case VIR_DOMAIN_RUNNING_BOOTED:
++    case VIR_DOMAIN_RUNNING_UNPAUSED:
++    case VIR_DOMAIN_RUNNING_WAKEUP:
++    case VIR_DOMAIN_RUNNING_CRASHED:
++    case VIR_DOMAIN_RUNNING_LAST:
++        break;
++    }
++
++    return VIR_DOMAIN_EVENT_RESUMED_UNPAUSED;
++}
+diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
+index 6a96f27a5f..cc406e3ca0 100644
+--- a/src/qemu/qemu_domain.h
++++ b/src/qemu/qemu_domain.h
+@@ -1066,4 +1066,7 @@ qemuDomainDiskCachemodeFlags(int cachemode,
+ 
+ char * qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivatePtr priv);
+ 
++virDomainEventResumedDetailType
++qemuDomainRunningReasonToResumeEvent(virDomainRunningReason reason);
++
+ #endif /* __QEMU_DOMAIN_H__ */
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index 7325bc4c90..37568165b7 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -694,6 +694,7 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
+     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+     qemuDomainObjPrivatePtr priv;
+     virDomainRunningReason reason = VIR_DOMAIN_RUNNING_UNPAUSED;
++    virDomainEventResumedDetailType eventDetail;
+ 
+     virObjectLock(vm);
+ 
+@@ -709,14 +710,16 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
+             goto unlock;
+         }
+ 
++        eventDetail = qemuDomainRunningReasonToResumeEvent(reason);
+         VIR_DEBUG("Transitioned guest %s out of paused into resumed state, "
+-                  "reason '%s'",
+-                  vm->def->name, virDomainRunningReasonTypeToString(reason));
++                  "reason '%s', event detail %d",
++                  vm->def->name, virDomainRunningReasonTypeToString(reason),
++                  eventDetail);
+ 
+         virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, reason);
+         event = virDomainEventLifecycleNewFromObj(vm,
+-                                         VIR_DOMAIN_EVENT_RESUMED,
+-                                         VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
++                                                  VIR_DOMAIN_EVENT_RESUMED,
++                                                  eventDetail);
+ 
+         if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0) {
+             VIR_WARN("Unable to save status on vm %s after state change",
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-Pass-running-reason-to-RESUME-event-handler.patch b/SOURCES/libvirt-qemu-Pass-running-reason-to-RESUME-event-handler.patch
new file mode 100644
index 0000000..574d6a5
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Pass-running-reason-to-RESUME-event-handler.patch
@@ -0,0 +1,123 @@
+From a2e308060512eb7d4ee00f7baddb7394d6e9e4e6 Mon Sep 17 00:00:00 2001
+Message-Id: <a2e308060512eb7d4ee00f7baddb7394d6e9e4e6@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Mon, 10 Sep 2018 19:41:53 +0200
+Subject: [PATCH] qemu: Pass running reason to RESUME event handler
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Whenever we get the RESUME event from QEMU, we change the state of the
+affected domain to VIR_DOMAIN_RUNNING with VIR_DOMAIN_RUNNING_UNPAUSED
+reason. This is fine if the domain is resumed unexpectedly, but when we
+sent "cont" to QEMU we usually have a better reason for the state
+change. The better reason is used in qemuProcessStartCPUs which also
+sets the domain state to running if qemuMonitorStartCPUs reports
+success. Thus we may end up with two state updates in a row, but the
+final reason is correct.
+
+This patch is a preparation for dropping the state change done in
+qemuMonitorStartCPUs for which we need to pass the actual running reason
+to the RESUME event handler and use it there instead of
+VIR_DOMAIN_RUNNING_UNPAUSED.
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 5dab984ed0cd0332e59d719420ab2f9d009b952f)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1634758
+https://bugzilla.redhat.com/show_bug.cgi?id=1634759
+
+Conflicts:
+	src/qemu/qemu_domain.h
+            - nodenames code is not backported
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_domain.h  |  4 ++++
+ src/qemu/qemu_process.c | 23 +++++++++++++++++------
+ 2 files changed, 21 insertions(+), 6 deletions(-)
+
+diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
+index e748d78adb..6a96f27a5f 100644
+--- a/src/qemu/qemu_domain.h
++++ b/src/qemu/qemu_domain.h
+@@ -363,6 +363,10 @@ struct _qemuDomainObjPrivate {
+ 
+     /* true if qemu-pr-helper process is running for the domain */
+     bool prDaemonRunning;
++
++    /* qemuProcessStartCPUs stores the reason for starting vCPUs here for the
++     * RESUME event handler to use it */
++    virDomainRunningReason runningReason;
+ };
+ 
+ # define QEMU_DOMAIN_PRIVATE(vm) \
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index 26979faa72..7325bc4c90 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -692,21 +692,28 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
+     virQEMUDriverPtr driver = opaque;
+     virObjectEventPtr event = NULL;
+     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
++    qemuDomainObjPrivatePtr priv;
++    virDomainRunningReason reason = VIR_DOMAIN_RUNNING_UNPAUSED;
+ 
+     virObjectLock(vm);
+-    if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
+-        qemuDomainObjPrivatePtr priv = vm->privateData;
+ 
++    priv = vm->privateData;
++    if (priv->runningReason != VIR_DOMAIN_RUNNING_UNKNOWN) {
++        reason = priv->runningReason;
++        priv->runningReason = VIR_DOMAIN_RUNNING_UNKNOWN;
++    }
++
++    if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
+         if (priv->gotShutdown) {
+             VIR_DEBUG("Ignoring RESUME event after SHUTDOWN");
+             goto unlock;
+         }
+ 
+-        VIR_DEBUG("Transitioned guest %s out of paused into resumed state",
+-                  vm->def->name);
++        VIR_DEBUG("Transitioned guest %s out of paused into resumed state, "
++                  "reason '%s'",
++                  vm->def->name, virDomainRunningReasonTypeToString(reason));
+ 
+-        virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
+-                                 VIR_DOMAIN_RUNNING_UNPAUSED);
++        virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, reason);
+         event = virDomainEventLifecycleNewFromObj(vm,
+                                          VIR_DOMAIN_EVENT_RESUMED,
+                                          VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
+@@ -3051,6 +3058,8 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm,
+     }
+     VIR_FREE(priv->lockState);
+ 
++    priv->runningReason = reason;
++
+     if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
+         goto release;
+ 
+@@ -3068,6 +3077,7 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm,
+     return ret;
+ 
+  release:
++    priv->runningReason = VIR_DOMAIN_RUNNING_UNKNOWN;
+     if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
+         VIR_WARN("Unable to release lease on %s", vm->def->name);
+     VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
+@@ -5928,6 +5938,7 @@ qemuProcessPrepareDomain(virQEMUDriverPtr driver,
+     priv->monError = false;
+     priv->monStart = 0;
+     priv->gotShutdown = false;
++    priv->runningReason = VIR_DOMAIN_RUNNING_UNKNOWN;
+ 
+     VIR_DEBUG("Updating guest CPU definition");
+     if (qemuProcessUpdateGuestCPU(vm->def, priv->qemuCaps, caps, flags) < 0)
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-Properly-report-VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT.patch b/SOURCES/libvirt-qemu-Properly-report-VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT.patch
new file mode 100644
index 0000000..a191515
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Properly-report-VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT.patch
@@ -0,0 +1,42 @@
+From 330e6224d11cbdef798c36ee5244f3b17d95d7cf Mon Sep 17 00:00:00 2001
+Message-Id: <330e6224d11cbdef798c36ee5244f3b17d95d7cf@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Mon, 10 Sep 2018 15:10:54 +0200
+Subject: [PATCH] qemu: Properly report VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT was defined but not used anywhere
+in our event generation code. This fixes qemuDomainRevertToSnapshot to
+properly report why the domain was resumed.
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 55af06187c48a01192764d8638b85739b0178fe0)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1634758
+https://bugzilla.redhat.com/show_bug.cgi?id=1634759
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_driver.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index f85248e3c7..ec1a43d41d 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -16323,7 +16323,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
+                                                  detail);
+             } else if (!was_running) {
+                 /* Transition 8 */
+-                detail = VIR_DOMAIN_EVENT_RESUMED;
++                detail = VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT;
+                 event = virDomainEventLifecycleNewFromObj(vm,
+                                                  VIR_DOMAIN_EVENT_RESUMED,
+                                                  detail);
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-Remove-duplicated-qemuAgentCheckError.patch b/SOURCES/libvirt-qemu-Remove-duplicated-qemuAgentCheckError.patch
new file mode 100644
index 0000000..6c801be
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Remove-duplicated-qemuAgentCheckError.patch
@@ -0,0 +1,48 @@
+From c39dd7dec2fe7ab631de9ef02a1d654385810750 Mon Sep 17 00:00:00 2001
+Message-Id: <c39dd7dec2fe7ab631de9ef02a1d654385810750@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Thu, 10 Jan 2019 12:49:10 +0100
+Subject: [PATCH] qemu: Remove duplicated qemuAgentCheckError
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Commit 5b3492fadb moved qemuAgentCheckError calls into
+qemuAgentCommand for various reasons; however, subsequent
+commit 0977b8aa0 adding a new command made call again
+So let's just remove the duplicitous call from
+qemuAgentGetInterfaces.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+ACKed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 9ed175fbc2deecfdaeabca7bc77c7e7ae33a3377)
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+
+7.7: https://bugzilla.redhat.com/show_bug.cgi?id=1663051
+8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1665000
+
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_agent.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
+index 10c6ef09fa..986e37b07d 100644
+--- a/src/qemu/qemu_agent.c
++++ b/src/qemu/qemu_agent.c
+@@ -1987,10 +1987,9 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
+     if (!(cmd = qemuAgentMakeCommand("guest-network-get-interfaces", NULL)))
+         goto cleanup;
+ 
+-    if (qemuAgentCommand(mon, cmd, &reply, false, VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK) < 0 ||
+-        qemuAgentCheckError(cmd, reply) < 0) {
++    if (qemuAgentCommand(mon, cmd, &reply, false,
++                         VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK) < 0)
+         goto cleanup;
+-    }
+ 
+     if (!(ret_array = virJSONValueObjectGet(reply, "return"))) {
+         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-Remove-unused-bypassSecurityDriver-from-qemuOpenFileAs.patch b/SOURCES/libvirt-qemu-Remove-unused-bypassSecurityDriver-from-qemuOpenFileAs.patch
new file mode 100644
index 0000000..d2d9bbe
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Remove-unused-bypassSecurityDriver-from-qemuOpenFileAs.patch
@@ -0,0 +1,157 @@
+From 81f9a452639c8f910f9a73fa6687834332bc9c7e Mon Sep 17 00:00:00 2001
+Message-Id: <81f9a452639c8f910f9a73fa6687834332bc9c7e@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 25 Jul 2018 08:27:09 +0200
+Subject: [PATCH] qemu: Remove unused bypassSecurityDriver from qemuOpenFileAs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1589115
+
+This argument is not used anymore. The only function that is
+passing non-NULL (qemuDomainSaveMemory) does not actually care
+for the value (after 23087cfdb) and every other caller just
+passes NULL anyway.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 8677a476c7e5cbf7b344329d54d0b1a2d666ffc3)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_driver.c | 32 +++++++++-----------------------
+ 1 file changed, 9 insertions(+), 23 deletions(-)
+
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index 3158f217fa..e8a595f17e 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -152,7 +152,7 @@ static int qemuDomainManagedSaveLoad(virDomainObjPtr vm,
+ static int qemuOpenFileAs(uid_t fallback_uid, gid_t fallback_gid,
+                           bool dynamicOwnership,
+                           const char *path, int oflags,
+-                          bool *needUnlink, bool *bypassSecurityDriver);
++                          bool *needUnlink);
+ 
+ static int qemuGetDHCPInterfaces(virDomainPtr dom,
+                                  virDomainObjPtr vm,
+@@ -2984,9 +2984,6 @@ qemuCompressGetCommand(virQEMUSaveFormat compression)
+  * @path: path to file to open
+  * @oflags: flags for opening/creation of the file
+  * @needUnlink: set to true if file was created by this function
+- * @bypassSecurityDriver: optional pointer to a boolean that will be set to true
+- *                        if security driver operations are pointless (due to
+- *                        NFS mount)
+  *
+  * Internal function to properly create or open existing files, with
+  * ownership affected by qemu driver setup and domain DAC label.
+@@ -3001,8 +2998,7 @@ qemuOpenFile(virQEMUDriverPtr driver,
+              virDomainObjPtr vm,
+              const char *path,
+              int oflags,
+-             bool *needUnlink,
+-             bool *bypassSecurityDriver)
++             bool *needUnlink)
+ {
+     int ret = -1;
+     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+@@ -3021,7 +3017,7 @@ qemuOpenFile(virQEMUDriverPtr driver,
+         goto cleanup;
+ 
+     ret = qemuOpenFileAs(user, group, dynamicOwnership,
+-                         path, oflags, needUnlink, bypassSecurityDriver);
++                         path, oflags, needUnlink);
+ 
+  cleanup:
+     return ret;
+@@ -3031,12 +3027,11 @@ static int
+ qemuOpenFileAs(uid_t fallback_uid, gid_t fallback_gid,
+                bool dynamicOwnership,
+                const char *path, int oflags,
+-               bool *needUnlink, bool *bypassSecurityDriver)
++               bool *needUnlink)
+ {
+     struct stat sb;
+     bool is_reg = true;
+     bool need_unlink = false;
+-    bool bypass_security = false;
+     unsigned int vfoflags = 0;
+     int fd = -1;
+     int path_shared = virFileIsSharedFS(path);
+@@ -3134,19 +3129,11 @@ qemuOpenFileAs(uid_t fallback_uid, gid_t fallback_gid,
+                                      path);
+                 goto cleanup;
+             }
+-
+-            /* Since we had to setuid to create the file, and the fstype
+-               is NFS, we assume it's a root-squashing NFS share, and that
+-               the security driver stuff would have failed anyway */
+-
+-            bypass_security = true;
+         }
+     }
+  cleanup:
+     if (needUnlink)
+         *needUnlink = need_unlink;
+-    if (bypassSecurityDriver)
+-        *bypassSecurityDriver = bypass_security;
+     return fd;
+ 
+  error:
+@@ -3198,7 +3185,6 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver,
+                      unsigned int flags,
+                      qemuDomainAsyncJob asyncJob)
+ {
+-    bool bypassSecurityDriver = false;
+     bool needUnlink = false;
+     int ret = -1;
+     int fd = -1;
+@@ -3218,7 +3204,7 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver,
+     }
+     fd = qemuOpenFile(driver, vm, path,
+                       O_WRONLY | O_TRUNC | O_CREAT | directFlag,
+-                      &needUnlink, &bypassSecurityDriver);
++                      &needUnlink);
+     if (fd < 0)
+         goto cleanup;
+ 
+@@ -3249,7 +3235,7 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver,
+     if (qemuFileWrapperFDClose(vm, wrapperFd) < 0)
+         goto cleanup;
+ 
+-    if ((fd = qemuOpenFile(driver, vm, path, O_WRONLY, NULL, NULL)) < 0 ||
++    if ((fd = qemuOpenFile(driver, vm, path, O_WRONLY, NULL)) < 0 ||
+         virQEMUSaveDataFinish(data, &fd, path) < 0)
+         goto cleanup;
+ 
+@@ -3809,7 +3795,7 @@ doCoreDump(virQEMUDriverPtr driver,
+      * created.  */
+     if ((fd = qemuOpenFile(driver, vm, path,
+                            O_CREAT | O_TRUNC | O_WRONLY | directFlag,
+-                           NULL, NULL)) < 0)
++                           NULL)) < 0)
+         goto cleanup;
+ 
+     if (!(wrapperFd = virFileWrapperFdNew(&fd, path, flags)))
+@@ -6436,7 +6422,7 @@ qemuDomainSaveImageOpen(virQEMUDriverPtr driver,
+     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
+         goto error;
+ 
+-    if ((fd = qemuOpenFile(driver, NULL, path, oflags, NULL, NULL)) < 0)
++    if ((fd = qemuOpenFile(driver, NULL, path, oflags, NULL)) < 0)
+         goto error;
+     if (bypass_cache &&
+         !(*wrapperFd = virFileWrapperFdNew(&fd, path,
+@@ -11880,7 +11866,7 @@ qemuDomainStorageOpenStat(virQEMUDriverPtr driver,
+ {
+     if (virStorageSourceIsLocalStorage(src)) {
+         if ((*ret_fd = qemuOpenFile(driver, vm, src->path, O_RDONLY,
+-                                    NULL, NULL)) < 0)
++                                    NULL)) < 0)
+             return -1;
+ 
+         if (fstat(*ret_fd, ret_sb) < 0) {
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-Report-more-appropriate-running-reasons.patch b/SOURCES/libvirt-qemu-Report-more-appropriate-running-reasons.patch
new file mode 100644
index 0000000..7764acf
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Report-more-appropriate-running-reasons.patch
@@ -0,0 +1,61 @@
+From d9922630f62b27e5fea978e2b0903ab0f72d88d4 Mon Sep 17 00:00:00 2001
+Message-Id: <d9922630f62b27e5fea978e2b0903ab0f72d88d4@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Tue, 11 Sep 2018 19:26:07 +0200
+Subject: [PATCH] qemu: Report more appropriate running reasons
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch replaces some rather generic VIR_DOMAIN_RUNNING_UNPAUSED
+reasons when changing domain state to running with more specific ones.
+All of them are done when libvirtd reconnects to an existing domain
+after being restarted and sees an unfinished migration or save.
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 54b5b0ac3945ad5417b67bec8443cf6e7b3d482b)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1634758
+https://bugzilla.redhat.com/show_bug.cgi?id=1634759
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_process.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index a4b1f97df5..26979faa72 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -3247,7 +3247,7 @@ qemuProcessRecoverMigrationIn(virQEMUDriverPtr driver,
+         VIR_DEBUG("Incoming migration finished, resuming domain %s",
+                   vm->def->name);
+         if (qemuProcessStartCPUs(driver, vm,
+-                                 VIR_DOMAIN_RUNNING_UNPAUSED,
++                                 VIR_DOMAIN_RUNNING_MIGRATED,
+                                  QEMU_ASYNC_JOB_NONE) < 0) {
+             VIR_WARN("Could not resume domain %s", vm->def->name);
+         }
+@@ -3354,7 +3354,7 @@ qemuProcessRecoverMigrationOut(virQEMUDriverPtr driver,
+             (reason == VIR_DOMAIN_PAUSED_MIGRATION ||
+              reason == VIR_DOMAIN_PAUSED_UNKNOWN)) {
+             if (qemuProcessStartCPUs(driver, vm,
+-                                     VIR_DOMAIN_RUNNING_UNPAUSED,
++                                     VIR_DOMAIN_RUNNING_MIGRATION_CANCELED,
+                                      QEMU_ASYNC_JOB_NONE) < 0) {
+                 VIR_WARN("Could not resume domain %s", vm->def->name);
+             }
+@@ -3412,7 +3412,7 @@ qemuProcessRecoverJob(virQEMUDriverPtr driver,
+                 reason == VIR_DOMAIN_PAUSED_MIGRATION)) ||
+               reason == VIR_DOMAIN_PAUSED_UNKNOWN)) {
+              if (qemuProcessStartCPUs(driver, vm,
+-                                      VIR_DOMAIN_RUNNING_UNPAUSED,
++                                      VIR_DOMAIN_RUNNING_SAVE_CANCELED,
+                                       QEMU_ASYNC_JOB_NONE) < 0) {
+                  VIR_WARN("Could not resume domain '%s' after migration to file",
+                           vm->def->name);
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-Set-identity-for-the-reconnect-all-thread.patch b/SOURCES/libvirt-qemu-Set-identity-for-the-reconnect-all-thread.patch
new file mode 100644
index 0000000..b2c1428
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Set-identity-for-the-reconnect-all-thread.patch
@@ -0,0 +1,94 @@
+From 4df55f75bf523e3c1964198299713bdfa85fbad2 Mon Sep 17 00:00:00 2001
+Message-Id: <4df55f75bf523e3c1964198299713bdfa85fbad2@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Wed, 14 Nov 2018 14:41:31 -0500
+Subject: [PATCH] qemu: Set identity for the reconnect all thread
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1648546 (RHEL8)
+https://bugzilla.redhat.com/show_bug.cgi?id=1631622 (RHEL7)
+
+If polkit authentication is enabled, an attempt to open
+the connection failed during virAccessDriverPolkitGetCaller
+when the call to virIdentityGetCurrent returned NULL resulting
+in the errors:
+
+  virAccessDriverPolkitGetCaller:87 : access denied:
+  Policy kit denied action org.libvirt.api.connect.getattr from <anonymous>
+
+Because qemuProcessReconnect runs in a thread during
+daemonRunStateInit processing it doesn't have the thread
+local identity. Thus when the virGetConnectNWFilter is
+called as part of the qemuProcessFiltersInstantiate when
+virDomainConfNWFilterInstantiate is run the attempt to get
+the idenity fails and results in the anonymous error above.
+
+To fix this, let's grab/use the virIdenityPtr of the process
+that will be creating the thread, e.g. what daemonRunStateInit
+has set and use that for our thread. That way any other similar
+processing that uses/requires an identity for any other call
+that would have previously been successfully run won't fail in
+a similar manner.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit b04b82f8cb671f067bad2d5e922acf88f13f0934)
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/qemu/qemu_process.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index 8ba14abfa4..4b99fbd835 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -81,6 +81,7 @@
+ #include "netdev_bandwidth_conf.h"
+ #include "virresctrl.h"
+ #include "virvsock.h"
++#include "viridentity.h"
+ 
+ #define VIR_FROM_THIS VIR_FROM_QEMU
+ 
+@@ -7609,6 +7610,7 @@ qemuProcessRefreshCPU(virQEMUDriverPtr driver,
+ struct qemuProcessReconnectData {
+     virQEMUDriverPtr driver;
+     virDomainObjPtr obj;
++    virIdentityPtr identity;
+ };
+ /*
+  * Open an existing VM's monitor, re-detect VCPU threads
+@@ -7645,6 +7647,8 @@ qemuProcessReconnect(void *opaque)
+     virCapsPtr caps = NULL;
+     bool retry = true;
+ 
++    virIdentitySetCurrent(data->identity);
++    virObjectUnref(data->identity);
+     VIR_FREE(data);
+ 
+     qemuDomainObjRestoreJob(obj, &oldjob);
+@@ -7865,6 +7869,7 @@ qemuProcessReconnect(void *opaque)
+     virObjectUnref(cfg);
+     virObjectUnref(caps);
+     virNWFilterUnlockFilterUpdates();
++    virIdentitySetCurrent(NULL);
+     return;
+ 
+  error:
+@@ -7902,6 +7907,7 @@ qemuProcessReconnectHelper(virDomainObjPtr obj,
+ 
+     memcpy(data, src, sizeof(*data));
+     data->obj = obj;
++    data->identity = virIdentityGetCurrent();
+ 
+     virNWFilterReadLockFilterUpdates();
+ 
+@@ -7925,6 +7931,7 @@ qemuProcessReconnectHelper(virDomainObjPtr obj,
+ 
+         virDomainObjEndAPI(&obj);
+         virNWFilterUnlockFilterUpdates();
++        virObjectUnref(data->identity);
+         VIR_FREE(data);
+         return -1;
+     }
+-- 
+2.19.2
+
diff --git a/SOURCES/libvirt-qemu-Wire-up-PR_MANAGER_STATUS_CHANGED-event.patch b/SOURCES/libvirt-qemu-Wire-up-PR_MANAGER_STATUS_CHANGED-event.patch
new file mode 100644
index 0000000..f1b3844
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Wire-up-PR_MANAGER_STATUS_CHANGED-event.patch
@@ -0,0 +1,275 @@
+From 89bfdeacefd0160080ab98a41109c75db6d5e913 Mon Sep 17 00:00:00 2001
+Message-Id: <89bfdeacefd0160080ab98a41109c75db6d5e913@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 11 Jul 2018 17:27:26 +0200
+Subject: [PATCH] qemu: Wire up PR_MANAGER_STATUS_CHANGED event
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1470007
+
+This event is emitted on the monitor if one of pr-managers lost
+connection to its pr-helper process. What libvirt needs to do is
+restart the pr-helper process iff it corresponds to managed
+pr-manager.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 6fbda83330293ed8bec1ea9e3ba7273c4ee2b9e2)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_domain.c       |  1 +
+ src/qemu/qemu_domain.h       |  1 +
+ src/qemu/qemu_driver.c       | 17 +++++++++++
+ src/qemu/qemu_monitor.c      | 15 ++++++++++
+ src/qemu/qemu_monitor.h      | 11 ++++++++
+ src/qemu/qemu_monitor_json.c | 23 +++++++++++++++
+ src/qemu/qemu_process.c      | 55 ++++++++++++++++++++++++++++++++++++
+ 7 files changed, 123 insertions(+)
+
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index cfecbaca74..dec057e021 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -12979,6 +12979,7 @@ qemuProcessEventFree(struct qemuProcessEvent *event)
+     case QEMU_PROCESS_EVENT_MONITOR_EOF:
+         VIR_FREE(event->data);
+         break;
++    case QEMU_PROCESS_EVENT_PR_DISCONNECT:
+     case QEMU_PROCESS_EVENT_LAST:
+         break;
+     }
+diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
+index 30d186a921..e748d78adb 100644
+--- a/src/qemu/qemu_domain.h
++++ b/src/qemu/qemu_domain.h
+@@ -477,6 +477,7 @@ typedef enum {
+     QEMU_PROCESS_EVENT_SERIAL_CHANGED,
+     QEMU_PROCESS_EVENT_BLOCK_JOB,
+     QEMU_PROCESS_EVENT_MONITOR_EOF,
++    QEMU_PROCESS_EVENT_PR_DISCONNECT,
+ 
+     QEMU_PROCESS_EVENT_LAST
+ } qemuProcessEventType;
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index 825b2b27e6..868ef9d406 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -4792,6 +4792,20 @@ processMonitorEOFEvent(virQEMUDriverPtr driver,
+ }
+ 
+ 
++static void
++processPRDisconnectEvent(virDomainObjPtr vm)
++{
++    qemuDomainObjPrivatePtr priv = vm->privateData;
++
++    if (!virDomainObjIsActive(vm))
++        return;
++
++    if (!priv->prDaemonRunning &&
++        virDomainDefHasManagedPR(vm->def))
++        qemuProcessStartManagedPRDaemon(vm);
++}
++
++
+ static void qemuProcessEventHandler(void *data, void *opaque)
+ {
+     struct qemuProcessEvent *processEvent = data;
+@@ -4829,6 +4843,9 @@ static void qemuProcessEventHandler(void *data, void *opaque)
+     case QEMU_PROCESS_EVENT_MONITOR_EOF:
+         processMonitorEOFEvent(driver, vm);
+         break;
++    case QEMU_PROCESS_EVENT_PR_DISCONNECT:
++        processPRDisconnectEvent(vm);
++        break;
+     case QEMU_PROCESS_EVENT_LAST:
+         break;
+     }
+diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
+index ae5b23b9fc..86b2b6e985 100644
+--- a/src/qemu/qemu_monitor.c
++++ b/src/qemu/qemu_monitor.c
+@@ -1669,6 +1669,21 @@ qemuMonitorEmitDumpCompleted(qemuMonitorPtr mon,
+ }
+ 
+ 
++int
++qemuMonitorEmitPRManagerStatusChanged(qemuMonitorPtr mon,
++                                      const char *prManager,
++                                      bool connected)
++{
++    int ret = -1;
++    VIR_DEBUG("mon=%p, prManager='%s', connected=%d", mon, prManager, connected);
++
++    QEMU_MONITOR_CALLBACK(mon, ret, domainPRManagerStatusChanged,
++                          mon->vm, prManager, connected);
++
++    return ret;
++}
++
++
+ int
+ qemuMonitorSetCapabilities(qemuMonitorPtr mon)
+ {
+diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
+index e8adda8aa0..a906bc8410 100644
+--- a/src/qemu/qemu_monitor.h
++++ b/src/qemu/qemu_monitor.h
+@@ -273,6 +273,12 @@ typedef int (*qemuMonitorDomainDumpCompletedCallback)(qemuMonitorPtr mon,
+                                                       const char *error,
+                                                       void *opaque);
+ 
++typedef int (*qemuMonitorDomainPRManagerStatusChangedCallback)(qemuMonitorPtr mon,
++                                                               virDomainObjPtr vm,
++                                                               const char *prManager,
++                                                               bool connected,
++                                                               void *opaque);
++
+ typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks;
+ typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr;
+ struct _qemuMonitorCallbacks {
+@@ -305,6 +311,7 @@ struct _qemuMonitorCallbacks {
+     qemuMonitorDomainAcpiOstInfoCallback domainAcpiOstInfo;
+     qemuMonitorDomainBlockThresholdCallback domainBlockThreshold;
+     qemuMonitorDomainDumpCompletedCallback domainDumpCompleted;
++    qemuMonitorDomainPRManagerStatusChangedCallback domainPRManagerStatusChanged;
+ };
+ 
+ char *qemuMonitorEscapeArg(const char *in);
+@@ -433,6 +440,10 @@ int qemuMonitorEmitDumpCompleted(qemuMonitorPtr mon,
+                                  qemuMonitorDumpStatsPtr stats,
+                                  const char *error);
+ 
++int qemuMonitorEmitPRManagerStatusChanged(qemuMonitorPtr mon,
++                                          const char *prManager,
++                                          bool connected);
++
+ int qemuMonitorStartCPUs(qemuMonitorPtr mon);
+ int qemuMonitorStopCPUs(qemuMonitorPtr mon);
+ 
+diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
+index 3e90279b71..03c94cd88b 100644
+--- a/src/qemu/qemu_monitor_json.c
++++ b/src/qemu/qemu_monitor_json.c
+@@ -91,6 +91,7 @@ static void qemuMonitorJSONHandleMigrationPass(qemuMonitorPtr mon, virJSONValueP
+ static void qemuMonitorJSONHandleAcpiOstInfo(qemuMonitorPtr mon, virJSONValuePtr data);
+ static void qemuMonitorJSONHandleBlockThreshold(qemuMonitorPtr mon, virJSONValuePtr data);
+ static void qemuMonitorJSONHandleDumpCompleted(qemuMonitorPtr mon, virJSONValuePtr data);
++static void qemuMonitorJSONHandlePRManagerStatusChanged(qemuMonitorPtr mon, virJSONValuePtr data);
+ 
+ typedef struct {
+     const char *type;
+@@ -113,6 +114,7 @@ static qemuEventHandler eventHandlers[] = {
+     { "MIGRATION_PASS", qemuMonitorJSONHandleMigrationPass, },
+     { "NIC_RX_FILTER_CHANGED", qemuMonitorJSONHandleNicRxFilterChanged, },
+     { "POWERDOWN", qemuMonitorJSONHandlePowerdown, },
++    { "PR_MANAGER_STATUS_CHANGED", qemuMonitorJSONHandlePRManagerStatusChanged, },
+     { "RESET", qemuMonitorJSONHandleReset, },
+     { "RESUME", qemuMonitorJSONHandleResume, },
+     { "RTC_CHANGE", qemuMonitorJSONHandleRTCChange, },
+@@ -1297,6 +1299,27 @@ qemuMonitorJSONHandleDumpCompleted(qemuMonitorPtr mon,
+ }
+ 
+ 
++static void qemuMonitorJSONHandlePRManagerStatusChanged(qemuMonitorPtr mon,
++                                                        virJSONValuePtr data)
++{
++    const char *name;
++    bool connected;
++
++    if (!(name = virJSONValueObjectGetString(data, "id"))) {
++        VIR_WARN("missing pr-manager alias in PR_MANAGER_STATUS_CHANGED event");
++        return;
++    }
++
++    if (virJSONValueObjectGetBoolean(data, "connected", &connected) < 0) {
++        VIR_WARN("missing connected state for %s "
++                 "in PR_MANAGER_STATUS_CHANGED event", name);
++        return;
++    }
++
++    qemuMonitorEmitPRManagerStatusChanged(mon, name, connected);
++}
++
++
+ int
+ qemuMonitorJSONHumanCommandWithFd(qemuMonitorPtr mon,
+                                   const char *cmd_str,
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index f200729cb1..fbc8529f3b 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -1615,6 +1615,60 @@ qemuProcessHandleDumpCompleted(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
+ }
+ 
+ 
++static int
++qemuProcessHandlePRManagerStatusChanged(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
++                                        virDomainObjPtr vm,
++                                        const char *prManager,
++                                        bool connected,
++                                        void *opaque)
++{
++    virQEMUDriverPtr driver = opaque;
++    qemuDomainObjPrivatePtr priv;
++    struct qemuProcessEvent *processEvent = NULL;
++    const char *managedAlias = qemuDomainGetManagedPRAlias();
++    int ret = -1;
++
++    virObjectLock(vm);
++
++    VIR_DEBUG("pr-manager %s status changed for domain %p %s connected=%d",
++              prManager, vm, vm->def->name, connected);
++
++    if (connected) {
++        /* Connect events are boring. */
++        ret = 0;
++        goto cleanup;
++    }
++    /* Disconnect events are more interesting. */
++
++    if (STRNEQ(prManager, managedAlias)) {
++        VIR_DEBUG("pr-manager %s not managed, ignoring event",
++                  prManager);
++        ret = 0;
++        goto cleanup;
++    }
++
++    priv = vm->privateData;
++    priv->prDaemonRunning = false;
++
++    if (VIR_ALLOC(processEvent) < 0)
++        goto cleanup;
++
++    processEvent->eventType = QEMU_PROCESS_EVENT_PR_DISCONNECT;
++    processEvent->vm = virObjectRef(vm);
++
++    if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) {
++        qemuProcessEventFree(processEvent);
++        virObjectUnref(vm);
++        goto cleanup;
++    }
++
++    ret = 0;
++ cleanup:
++    virObjectUnlock(vm);
++    return ret;
++}
++
++
+ static qemuMonitorCallbacks monitorCallbacks = {
+     .eofNotify = qemuProcessHandleMonitorEOF,
+     .errorNotify = qemuProcessHandleMonitorError,
+@@ -1643,6 +1697,7 @@ static qemuMonitorCallbacks monitorCallbacks = {
+     .domainAcpiOstInfo = qemuProcessHandleAcpiOstInfo,
+     .domainBlockThreshold = qemuProcessHandleBlockThreshold,
+     .domainDumpCompleted = qemuProcessHandleDumpCompleted,
++    .domainPRManagerStatusChanged = qemuProcessHandlePRManagerStatusChanged,
+ };
+ 
+ static void
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-add-vfio-ap-capability.patch b/SOURCES/libvirt-qemu-add-vfio-ap-capability.patch
new file mode 100644
index 0000000..822f4d5
--- /dev/null
+++ b/SOURCES/libvirt-qemu-add-vfio-ap-capability.patch
@@ -0,0 +1,58 @@
+From 393120dca767f8a8dc5b60a46dd2c6124208e4df Mon Sep 17 00:00:00 2001
+Message-Id: <393120dca767f8a8dc5b60a46dd2c6124208e4df@dist-git>
+From: Boris Fiuczynski <fiuczy@linux.ibm.com>
+Date: Fri, 30 Nov 2018 15:49:23 +0100
+Subject: [PATCH] qemu: add vfio-ap capability
+
+Introduce vfio-ap capability.
+
+Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
+Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
+Reviewed-by: Thomas Huth <thuth@redhat.com>
+Reviewed-by: Chris Venteicher <cventeic@redhat.com>
+(cherry picked from commit dc788d254017d51c6a3ccb5e5c9663ce82a4683b)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1508146
+
+Signed-off-by: Pino Toscano <ptoscano@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_capabilities.c | 2 ++
+ src/qemu/qemu_capabilities.h | 1 +
+ 2 files changed, 3 insertions(+)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index 5fd10c2d40..feef102874 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -507,6 +507,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
+ 
+               /* 315 */
+               "vfio-pci.display",
++              "vfio-ap",
+     );
+ 
+ 
+@@ -1145,6 +1146,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
+     { "vhost-vsock-device", QEMU_CAPS_DEVICE_VHOST_VSOCK },
+     { "mch", QEMU_CAPS_DEVICE_MCH },
+     { "sev-guest", QEMU_CAPS_SEV_GUEST },
++    { "vfio-ap", QEMU_CAPS_DEVICE_VFIO_AP },
+ };
+ 
+ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[] = {
+diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
+index 6acd9fe825..1a9e5386a8 100644
+--- a/src/qemu/qemu_capabilities.h
++++ b/src/qemu/qemu_capabilities.h
+@@ -491,6 +491,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
+ 
+     /* 315 */
+     QEMU_CAPS_VFIO_PCI_DISPLAY, /* -device vfio-pci.display */
++    QEMU_CAPS_DEVICE_VFIO_AP, /* -device vfio-ap */
+ 
+     QEMU_CAPS_LAST /* this must always be the last item */
+ } virQEMUCapsFlags;
+-- 
+2.19.2
+
diff --git a/SOURCES/libvirt-qemu-address-Handle-all-the-video-devices-within-a-single-loop.patch b/SOURCES/libvirt-qemu-address-Handle-all-the-video-devices-within-a-single-loop.patch
new file mode 100644
index 0000000..3ac0110
--- /dev/null
+++ b/SOURCES/libvirt-qemu-address-Handle-all-the-video-devices-within-a-single-loop.patch
@@ -0,0 +1,52 @@
+From 9743e1100067451a20fe1373c1d3b828f416320b Mon Sep 17 00:00:00 2001
+Message-Id: <9743e1100067451a20fe1373c1d3b828f416320b@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:50 +0200
+Subject: [PATCH] qemu: address: Handle all the video devices within a single
+ loop
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since 133fb140 moved the validation of a video device into a separate
+function, the code handling PCI slot assignment for video devices has
+been the same for both the primary device and the secondary devices.
+Let's merge these and thus handle all the devices within the existing
+'for' loop.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 3e90bd67a215adcb997b8c2be5d1d6b83251409f)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_domain_address.c | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
+index e9f460d77a..ab2ac022f1 100644
+--- a/src/qemu/qemu_domain_address.c
++++ b/src/qemu/qemu_domain_address.c
+@@ -2103,15 +2103,9 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
+             goto error;
+     }
+ 
+-    /* Assign a PCI slot to the primary video card if there is not an
+-     * assigned address. */
+-    if (def->nvideos > 0 &&
+-        virDeviceInfoPCIAddressWanted(&def->videos[0]->info)) {
+-        if (qemuDomainPCIAddressReserveNextAddr(addrs, &def->videos[0]->info) < 0)
+-            goto error;
+-    }
++    /* Video devices */
++    for (i = 0; i < def->nvideos; i++) {
+ 
+-    for (i = 1; i < def->nvideos; i++) {
+         if (!virDeviceInfoPCIAddressWanted(&def->videos[i]->info))
+             continue;
+ 
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-capabilities-Add-capability-for-werror-rerror-for-usb-device-frontend.patch b/SOURCES/libvirt-qemu-capabilities-Add-capability-for-werror-rerror-for-usb-device-frontend.patch
new file mode 100644
index 0000000..2999acd
--- /dev/null
+++ b/SOURCES/libvirt-qemu-capabilities-Add-capability-for-werror-rerror-for-usb-device-frontend.patch
@@ -0,0 +1,73 @@
+From 81505bfde8f4acf9b94a1c6dc010d707dcd49b6a Mon Sep 17 00:00:00 2001
+Message-Id: <81505bfde8f4acf9b94a1c6dc010d707dcd49b6a@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:48 +0200
+Subject: [PATCH] qemu: capabilities: Add capability for werror/rerror for
+ 'usb-device' frontend
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Support for specifying it with the -device frontend was added recently.
+Add a capability for it.
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit a087a8e60ad62a719165e3c2c9970480b9531062)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_capabilities.c                     | 2 ++
+ src/qemu/qemu_capabilities.h                     | 1 +
+ tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml | 1 +
+ 3 files changed, 4 insertions(+)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index c7da916f9a..23b483349f 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -502,6 +502,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
+               "sev-guest",
+               "machine.pseries.cap-hpt-max-page-size",
+               "machine.pseries.cap-htm",
++              "usb-storage.werror",
+     );
+ 
+ 
+@@ -1240,6 +1241,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsUSBStorage[] = {
+     { "removable", QEMU_CAPS_USB_STORAGE_REMOVABLE },
+     { "share-rw", QEMU_CAPS_DISK_SHARE_RW },
+     { "write-cache", QEMU_CAPS_DISK_WRITE_CACHE },
++    { "werror", QEMU_CAPS_USB_STORAGE_WERROR },
+ };
+ 
+ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsKVMPit[] = {
+diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
+index a048a1cf02..1fa0ebfea3 100644
+--- a/src/qemu/qemu_capabilities.h
++++ b/src/qemu/qemu_capabilities.h
+@@ -486,6 +486,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
+     QEMU_CAPS_SEV_GUEST, /* -object sev-guest,... */
+     QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE, /* -machine pseries.cap-hpt-max-page-size */
+     QEMU_CAPS_MACHINE_PSERIES_CAP_HTM, /* -machine pseries.cap-htm */
++    QEMU_CAPS_USB_STORAGE_WERROR, /* -device usb-storage,werror=..,rerror=.. */
+ 
+     QEMU_CAPS_LAST /* this must always be the last item */
+ } virQEMUCapsFlags;
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+index 07e3de8677..d7c25c65dd 100644
+--- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+@@ -209,6 +209,7 @@
+   <flag name='mch'/>
+   <flag name='mch.extended-tseg-mbytes'/>
+   <flag name='sev-guest'/>
++  <flag name='usb-storage.werror'/>
+   <version>2012050</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>437827</microcodeVersion>
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-caps-Add-vfio-pci.display-capability.patch b/SOURCES/libvirt-qemu-caps-Add-vfio-pci.display-capability.patch
new file mode 100644
index 0000000..db8ec77
--- /dev/null
+++ b/SOURCES/libvirt-qemu-caps-Add-vfio-pci.display-capability.patch
@@ -0,0 +1,142 @@
+From 93a2ea36d65b36b542b1a96f16ea0ef271baad37 Mon Sep 17 00:00:00 2001
+Message-Id: <93a2ea36d65b36b542b1a96f16ea0ef271baad37@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:59 +0200
+Subject: [PATCH] qemu: caps: Add vfio-pci.display capability
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+QEMU 2.12 introduced a new vfio-pci device option 'display=on/off/auto'.
+This patch introduces the necessary capability.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 11c7bdac6dbe8659c2f8bf7a35b97288b0acb207)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_capabilities.c                       | 4 ++++
+ src/qemu/qemu_capabilities.h                       | 3 +++
+ tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml | 1 +
+ tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml   | 1 +
+ tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml   | 1 +
+ tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml  | 1 +
+ tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml    | 1 +
+ tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml   | 1 +
+ 8 files changed, 13 insertions(+)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index df358f8967..0fb800589a 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -504,6 +504,9 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
+               "machine.pseries.cap-htm",
+               "usb-storage.werror",
+               "egl-headless",
++
++              /* 315 */
++              "vfio-pci.display",
+     );
+ 
+ 
+@@ -1197,6 +1200,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsPCIAssign[] = {
+ 
+ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVfioPCI[] = {
+     { "bootindex", QEMU_CAPS_VFIO_PCI_BOOTINDEX },
++    { "display", QEMU_CAPS_VFIO_PCI_DISPLAY },
+ };
+ 
+ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsSCSIDisk[] = {
+diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
+index 55221e7e57..9e8ad5f5c3 100644
+--- a/src/qemu/qemu_capabilities.h
++++ b/src/qemu/qemu_capabilities.h
+@@ -489,6 +489,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
+     QEMU_CAPS_USB_STORAGE_WERROR, /* -device usb-storage,werror=..,rerror=.. */
+     QEMU_CAPS_EGL_HEADLESS, /* -display egl-headless */
+ 
++    /* 315 */
++    QEMU_CAPS_VFIO_PCI_DISPLAY, /* -device vfio-pci.display */
++
+     QEMU_CAPS_LAST /* this must always be the last item */
+ } virQEMUCapsFlags;
+ 
+diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
+index 80e7afec04..0cc6327573 100644
+--- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
+@@ -170,6 +170,7 @@
+   <flag name='chardev-fd-pass'/>
+   <flag name='tpm-emulator'/>
+   <flag name='egl-headless'/>
++  <flag name='vfio-pci.display'/>
+   <version>2011090</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>347550</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
+index c4b09c0003..a88da6193e 100644
+--- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
+@@ -168,6 +168,7 @@
+   <flag name='tpm-emulator'/>
+   <flag name='machine.pseries.cap-htm'/>
+   <flag name='egl-headless'/>
++  <flag name='vfio-pci.display'/>
+   <version>2011090</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>428334</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
+index 1ff2fe45e1..7121da27a0 100644
+--- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
++++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
+@@ -134,6 +134,7 @@
+   <flag name='chardev-fd-pass'/>
+   <flag name='tpm-emulator'/>
+   <flag name='egl-headless'/>
++  <flag name='vfio-pci.display'/>
+   <version>2012000</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>375999</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
+index 37d17786cf..78889facce 100644
+--- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
+@@ -212,6 +212,7 @@
+   <flag name='mch.extended-tseg-mbytes'/>
+   <flag name='sev-guest'/>
+   <flag name='egl-headless'/>
++  <flag name='vfio-pci.display'/>
+   <version>2011090</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>416196</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
+index 57bf5dba11..01bb968938 100644
+--- a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
+@@ -168,6 +168,7 @@
+   <flag name='machine.pseries.cap-hpt-max-page-size'/>
+   <flag name='machine.pseries.cap-htm'/>
+   <flag name='egl-headless'/>
++  <flag name='vfio-pci.display'/>
+   <version>2012050</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>446771</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+index 431910a9e3..4bc7cfeebc 100644
+--- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+@@ -215,6 +215,7 @@
+   <flag name='sev-guest'/>
+   <flag name='usb-storage.werror'/>
+   <flag name='egl-headless'/>
++  <flag name='vfio-pci.display'/>
+   <version>2012090</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>438109</microcodeVersion>
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-caps-Don-t-try-to-ask-for-CAP_DAC_OVERRIDE-if-non-root.patch b/SOURCES/libvirt-qemu-caps-Don-t-try-to-ask-for-CAP_DAC_OVERRIDE-if-non-root.patch
new file mode 100644
index 0000000..94e595d
--- /dev/null
+++ b/SOURCES/libvirt-qemu-caps-Don-t-try-to-ask-for-CAP_DAC_OVERRIDE-if-non-root.patch
@@ -0,0 +1,39 @@
+From e22ab3412457f4d804ad7b0f62bd37ae07ec186d Mon Sep 17 00:00:00 2001
+Message-Id: <e22ab3412457f4d804ad7b0f62bd37ae07ec186d@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Tue, 5 Feb 2019 10:20:33 +0100
+Subject: [PATCH] qemu: caps: Don't try to ask for CAP_DAC_OVERRIDE if non-root
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+It will not work. This breaks qemu capabilities probing as a user.
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 620d9dd598fde388f56ac37bcd3b31168c2f9fc6)
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1665400
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_capabilities.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index f71cd08f4d..912f758bcd 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -4482,7 +4482,8 @@ virQEMUCapsInitQMPCommandRun(virQEMUCapsInitQMPCommandPtr cmd,
+ #if WITH_CAPNG
+     /* QEMU might run into permission issues, e.g. /dev/sev (0600), override
+      * them just for the purpose of probing */
+-    virCommandAllowCap(cmd->cmd, CAP_DAC_OVERRIDE);
++    if (geteuid() == 0)
++        virCommandAllowCap(cmd->cmd, CAP_DAC_OVERRIDE);
+ #endif
+ 
+     virCommandSetGID(cmd->cmd, cmd->runGid);
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-caps-Format-SEV-platform-data-into-qemuCaps-cache.patch b/SOURCES/libvirt-qemu-caps-Format-SEV-platform-data-into-qemuCaps-cache.patch
new file mode 100644
index 0000000..898a6ae
--- /dev/null
+++ b/SOURCES/libvirt-qemu-caps-Format-SEV-platform-data-into-qemuCaps-cache.patch
@@ -0,0 +1,238 @@
+From 9f03a9e4bf2c5aad056f44ef1fe6c57eac3a7e74 Mon Sep 17 00:00:00 2001
+Message-Id: <9f03a9e4bf2c5aad056f44ef1fe6c57eac3a7e74@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Mon, 20 Aug 2018 17:18:53 +0200
+Subject: [PATCH] qemu: caps: Format SEV platform data into qemuCaps cache
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since we're not saving the platform-specific data into a cache, we're
+not going to populate the structure, which in turn will cause a crash
+upon calling virNodeGetSEVInfo because of a NULL pointer dereference.
+Ultimately, we should start caching this data along with host-specific
+capabilities like NUMA and SELinux stuff into a separate cache, but for
+the time being, this is a semi-proper fix for a potential crash.
+
+Backtrace (requires libvirtd restart to load qemu caps from cache):
+    #0 qemuGetSEVInfoToParams
+    #1 qemuNodeGetSEVInfo
+    #2 virNodeGetSEVInfo
+    #3 remoteDispatchNodeGetSevInfo
+    #4 remoteDispatchNodeGetSevInfoHelper
+    #5 virNetServerProgramDispatchCall
+    #6 virNetServerProgramDispatch
+    #7 virNetServerProcessMsg
+    #8 virNetServerHandleJob
+    #9 virThreadPoolWorker
+    #10 virThreadHelper
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1612009
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Acked-by: Peter Krempa <pkrempa@redhat.com>
+Tested-by: Brijesh Singh <brijesh.singh@amd.com>
+(cherry picked from commit 77f51ab52049734d80a8ccb79b80189c7fb95c41)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1612009
+https://bugzilla.redhat.com/show_bug.cgi?id=1619150
+
+Amend:
+    - fixed the VIR_AUTOPTR bits which downstream doesn't support
+    and wouldn't compile
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_capabilities.c                  | 109 ++++++++++++++++++
+ .../qemu_2.12.0.x86_64.xml                    |   5 +-
+ .../caps_2.12.0.x86_64.xml                    |   6 +
+ 3 files changed, 119 insertions(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index 55024ad735..1321696d11 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -1572,6 +1572,30 @@ virQEMUCapsHostCPUDataClear(virQEMUCapsHostCPUDataPtr cpuData)
+ }
+ 
+ 
++static int
++virQEMUCapsSEVInfoCopy(virSEVCapabilityPtr *dst,
++                       virSEVCapabilityPtr src)
++{
++    int ret = -1;
++    virSEVCapabilityPtr tmp = NULL;
++
++    if (VIR_ALLOC(tmp) < 0 ||
++        VIR_STRDUP(tmp->pdh, src->pdh) < 0 ||
++        VIR_STRDUP(tmp->cert_chain, src->cert_chain) < 0)
++        goto cleanup;
++
++    tmp->cbitpos = src->cbitpos;
++    tmp->reduced_phys_bits = src->reduced_phys_bits;
++
++    VIR_STEAL_PTR(*dst, tmp);
++
++    ret = 0;
++ cleanup:
++    virSEVCapabilitiesFree(tmp);
++    return ret;
++}
++
++
+ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
+ {
+     virQEMUCapsPtr ret = virQEMUCapsNew();
+@@ -1634,6 +1658,11 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
+     for (i = 0; i < qemuCaps->ngicCapabilities; i++)
+         ret->gicCapabilities[i] = qemuCaps->gicCapabilities[i];
+ 
++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SEV_GUEST) &&
++        virQEMUCapsSEVInfoCopy(&ret->sevCapabilities,
++                               qemuCaps->sevCapabilities) < 0)
++        goto error;
++
+     return ret;
+ 
+  error:
+@@ -3272,6 +3301,62 @@ virQEMUCapsCachePrivFree(void *privData)
+ }
+ 
+ 
++static int
++virQEMUCapsParseSEVInfo(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt)
++{
++    int ret = -1;
++    virSEVCapabilityPtr sev = NULL;
++
++    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SEV_GUEST))
++        return 0;
++
++    if (virXPathBoolean("boolean(./sev)", ctxt) == 0) {
++        virReportError(VIR_ERR_XML_ERROR, "%s",
++                       _("missing SEV platform data in QEMU "
++                         "capabilities cache"));
++        return -1;
++    }
++
++    if (VIR_ALLOC(sev) < 0)
++        return -1;
++
++    if (virXPathUInt("string(./sev/cbitpos)", ctxt, &sev->cbitpos) < 0) {
++        virReportError(VIR_ERR_XML_ERROR, "%s",
++                       _("missing or malformed SEV cbitpos information "
++                         "in QEMU capabilities cache"));
++        goto cleanup;
++    }
++
++    if (virXPathUInt("string(./sev/reducedPhysBits)", ctxt,
++                     &sev->reduced_phys_bits) < 0) {
++        virReportError(VIR_ERR_XML_ERROR, "%s",
++                       _("missing or malformed SEV reducedPhysBits information "
++                         "in QEMU capabilities cache"));
++        goto cleanup;
++    }
++
++    if (!(sev->pdh = virXPathString("string(./sev/pdh)", ctxt)))  {
++        virReportError(VIR_ERR_XML_ERROR, "%s",
++                       _("missing SEV pdh information "
++                         "in QEMU capabilities cache"));
++        goto cleanup;
++    }
++
++    if (!(sev->cert_chain = virXPathString("string(./sev/certChain)", ctxt))) {
++        virReportError(VIR_ERR_XML_ERROR, "%s",
++                       _("missing SEV certChain information "
++                         "in QEMU capabilities cache"));
++        goto cleanup;
++    }
++
++    VIR_STEAL_PTR(qemuCaps->sevCapabilities, sev);
++    ret = 0;
++ cleanup:
++    virSEVCapabilitiesFree(sev);
++    return ret;
++}
++
++
+ /*
+  * Parsing a doc that looks like
+  *
+@@ -3520,6 +3605,9 @@ virQEMUCapsLoadCache(virArch hostArch,
+     }
+     VIR_FREE(nodes);
+ 
++    if (virQEMUCapsParseSEVInfo(qemuCaps, ctxt) < 0)
++        goto cleanup;
++
+     virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
+     virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
+ 
+@@ -3637,6 +3725,24 @@ virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps,
+ }
+ 
+ 
++static void
++virQEMUCapsFormatSEVInfo(virQEMUCapsPtr qemuCaps, virBufferPtr buf)
++{
++    virSEVCapabilityPtr sev = virQEMUCapsGetSEVCapabilities(qemuCaps);
++
++    virBufferAddLit(buf, "<sev>\n");
++    virBufferAdjustIndent(buf, 2);
++    virBufferAsprintf(buf, "<cbitpos>%u</cbitpos>\n", sev->cbitpos);
++    virBufferAsprintf(buf, "<reducedPhysBits>%u</reducedPhysBits>\n",
++                      sev->reduced_phys_bits);
++    virBufferEscapeString(buf, "<pdh>%s</pdh>\n", sev->pdh);
++    virBufferEscapeString(buf, "<certChain>%s</certChain>\n",
++                          sev->cert_chain);
++    virBufferAdjustIndent(buf, -2);
++    virBufferAddLit(buf, "</sev>\n");
++}
++
++
+ char *
+ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps)
+ {
+@@ -3718,6 +3824,9 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps)
+                           emulated ? "yes" : "no");
+     }
+ 
++    if (qemuCaps->sevCapabilities)
++        virQEMUCapsFormatSEVInfo(qemuCaps, &buf);
++
+     virBufferAdjustIndent(&buf, -2);
+     virBufferAddLit(&buf, "</qemuCaps>\n");
+ 
+diff --git a/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml
+index 7a1be4c093..a8d6a4d629 100644
+--- a/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml
++++ b/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml
+@@ -142,6 +142,9 @@
+     <gic supported='no'/>
+     <vmcoreinfo supported='yes'/>
+     <genid supported='yes'/>
+-    <sev supported='no'/>
++    <sev supported='yes'>
++      <cbitpos>47</cbitpos>
++      <reducedPhysBits>1</reducedPhysBits>
++    </sev>
+   </features>
+ </domainCapabilities>
+diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
+index 78889facce..f0dc082640 100644
+--- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
+@@ -1254,4 +1254,10 @@
+   <machine name='pc-0.11' hotplugCpus='yes' maxCpus='255'/>
+   <machine name='pc-0.12' hotplugCpus='yes' maxCpus='255'/>
+   <machine name='pc-0.10' hotplugCpus='yes' maxCpus='255'/>
++  <sev>
++    <cbitpos>47</cbitpos>
++    <reducedPhysBits>1</reducedPhysBits>
++    <pdh>AQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAA</pdh>
++    <certChain>AQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAA</certChain>
++  </sev>
+ </qemuCaps>
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-caps-Introduce-a-capability-for-egl-headless.patch b/SOURCES/libvirt-qemu-caps-Introduce-a-capability-for-egl-headless.patch
new file mode 100644
index 0000000..c8239d6
--- /dev/null
+++ b/SOURCES/libvirt-qemu-caps-Introduce-a-capability-for-egl-headless.patch
@@ -0,0 +1,223 @@
+From 4628d3e178430d418703f39e86d63e22a6af209f Mon Sep 17 00:00:00 2001
+Message-Id: <4628d3e178430d418703f39e86d63e22a6af209f@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:57 +0200
+Subject: [PATCH] qemu: caps: Introduce a capability for egl-headless
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since QEMU 2.10, it's possible to use a new type of display -
+egl-headless which uses drm nodes to provide OpenGL support. This patch
+adds a capability for that. However, since QEMU doesn't provide a QMP
+command to probe it, we have to base the capability on specific QEMU
+version.
+
+Acked-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 7ab7d0ed49d8501198b33c655cc646667d333f8c)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_capabilities.c                       | 6 ++++++
+ src/qemu/qemu_capabilities.h                       | 1 +
+ tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml | 1 +
+ tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml   | 1 +
+ tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml   | 1 +
+ tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml  | 1 +
+ tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml   | 1 +
+ tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml  | 1 +
+ tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml | 1 +
+ tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml   | 1 +
+ tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml   | 1 +
+ tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml  | 1 +
+ tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml    | 1 +
+ tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml   | 1 +
+ 14 files changed, 19 insertions(+)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index 23b483349f..df358f8967 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -503,6 +503,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
+               "machine.pseries.cap-hpt-max-page-size",
+               "machine.pseries.cap-htm",
+               "usb-storage.werror",
++              "egl-headless",
+     );
+ 
+ 
+@@ -4030,6 +4031,11 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
+         virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
+     }
+ 
++    /* '-display egl-headless' cmdline option is supported since QEMU 2.10, but
++     * there's no way to probe it */
++    if (qemuCaps->version >= 2010000)
++        virQEMUCapsSet(qemuCaps, QEMU_CAPS_EGL_HEADLESS);
++
+     /* no way to query for -numa dist */
+     if (qemuCaps->version >= 2010000)
+         virQEMUCapsSet(qemuCaps, QEMU_CAPS_NUMA_DIST);
+diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
+index 1fa0ebfea3..55221e7e57 100644
+--- a/src/qemu/qemu_capabilities.h
++++ b/src/qemu/qemu_capabilities.h
+@@ -487,6 +487,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
+     QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE, /* -machine pseries.cap-hpt-max-page-size */
+     QEMU_CAPS_MACHINE_PSERIES_CAP_HTM, /* -machine pseries.cap-htm */
+     QEMU_CAPS_USB_STORAGE_WERROR, /* -device usb-storage,werror=..,rerror=.. */
++    QEMU_CAPS_EGL_HEADLESS, /* -display egl-headless */
+ 
+     QEMU_CAPS_LAST /* this must always be the last item */
+ } virQEMUCapsFlags;
+diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml
+index 169641063c..a70e050765 100644
+--- a/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml
+@@ -159,6 +159,7 @@
+   <flag name='hda-output'/>
+   <flag name='blockdev-del'/>
+   <flag name='vhost-vsock'/>
++  <flag name='egl-headless'/>
+   <version>2010000</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>307647</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml
+index 92c095abd2..72709905d8 100644
+--- a/tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml
+@@ -158,6 +158,7 @@
+   <flag name='hda-output'/>
+   <flag name='blockdev-del'/>
+   <flag name='vhost-vsock'/>
++  <flag name='egl-headless'/>
+   <version>2010000</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>386992</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml
+index 5e22e21224..7347f5683f 100644
+--- a/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml
++++ b/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml
+@@ -119,6 +119,7 @@
+   <flag name='sdl-gl'/>
+   <flag name='blockdev-del'/>
+   <flag name='vhost-vsock'/>
++  <flag name='egl-headless'/>
+   <version>2010000</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>307899</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml
+index 10b066bff1..d69a148cd2 100644
+--- a/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml
+@@ -203,6 +203,7 @@
+   <flag name='vmgenid'/>
+   <flag name='vhost-vsock'/>
+   <flag name='mch'/>
++  <flag name='egl-headless'/>
+   <version>2010000</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>367995</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml
+index 6ca2e57ef8..b359f9a049 100644
+--- a/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml
++++ b/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml
+@@ -126,6 +126,7 @@
+   <flag name='blockdev-del'/>
+   <flag name='vhost-vsock'/>
+   <flag name='tpm-emulator'/>
++  <flag name='egl-headless'/>
+   <version>2011000</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>346751</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
+index c52e44a498..210f774c4e 100644
+--- a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
+@@ -207,6 +207,7 @@
+   <flag name='tpm-emulator'/>
+   <flag name='mch'/>
+   <flag name='mch.extended-tseg-mbytes'/>
++  <flag name='egl-headless'/>
+   <version>2011000</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>371455</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
+index ecc029f403..80e7afec04 100644
+--- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
+@@ -169,6 +169,7 @@
+   <flag name='vhost-vsock'/>
+   <flag name='chardev-fd-pass'/>
+   <flag name='tpm-emulator'/>
++  <flag name='egl-headless'/>
+   <version>2011090</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>347550</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
+index 7139179304..c4b09c0003 100644
+--- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
+@@ -167,6 +167,7 @@
+   <flag name='chardev-fd-pass'/>
+   <flag name='tpm-emulator'/>
+   <flag name='machine.pseries.cap-htm'/>
++  <flag name='egl-headless'/>
+   <version>2011090</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>428334</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
+index 87d189e58d..1ff2fe45e1 100644
+--- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
++++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
+@@ -133,6 +133,7 @@
+   <flag name='vhost-vsock'/>
+   <flag name='chardev-fd-pass'/>
+   <flag name='tpm-emulator'/>
++  <flag name='egl-headless'/>
+   <version>2012000</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>375999</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
+index 9c1f6c327c..37d17786cf 100644
+--- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
++++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
+@@ -211,6 +211,7 @@
+   <flag name='mch'/>
+   <flag name='mch.extended-tseg-mbytes'/>
+   <flag name='sev-guest'/>
++  <flag name='egl-headless'/>
+   <version>2011090</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>416196</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
+index 33cd00e613..57bf5dba11 100644
+--- a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
+@@ -167,6 +167,7 @@
+   <flag name='tpm-emulator'/>
+   <flag name='machine.pseries.cap-hpt-max-page-size'/>
+   <flag name='machine.pseries.cap-htm'/>
++  <flag name='egl-headless'/>
+   <version>2012050</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>446771</microcodeVersion>
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+index cd036d9323..431910a9e3 100644
+--- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+@@ -214,6 +214,7 @@
+   <flag name='mch.extended-tseg-mbytes'/>
+   <flag name='sev-guest'/>
+   <flag name='usb-storage.werror'/>
++  <flag name='egl-headless'/>
+   <version>2012090</version>
+   <kvmVersion>0</kvmVersion>
+   <microcodeVersion>438109</microcodeVersion>
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-caps-Use-CAP_DAC_OVERRIDE-for-probing-to-avoid-permission-issues.patch b/SOURCES/libvirt-qemu-caps-Use-CAP_DAC_OVERRIDE-for-probing-to-avoid-permission-issues.patch
new file mode 100644
index 0000000..e2f4672
--- /dev/null
+++ b/SOURCES/libvirt-qemu-caps-Use-CAP_DAC_OVERRIDE-for-probing-to-avoid-permission-issues.patch
@@ -0,0 +1,127 @@
+From 0b90fc0c5d4bd3eecbf8b51ff996116bc137d199 Mon Sep 17 00:00:00 2001
+Message-Id: <0b90fc0c5d4bd3eecbf8b51ff996116bc137d199@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Fri, 1 Feb 2019 17:21:58 +0100
+Subject: [PATCH] qemu: caps: Use CAP_DAC_OVERRIDE for probing to avoid
+ permission issues
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This is mainly about /dev/sev and its default permissions 0600. Of
+course, rule of 'tinfoil' would be that we can't trust anything, but the
+probing code in QEMU is considered safe from security's perspective + we
+can't create an udev rule for this at the moment, because ioctls and
+file system permissions aren't cross-checked in kernel and therefore a
+user with read permissions could issue a 'privileged' operation on SEV
+which is currently only limited to root.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1665400
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit a2d3dea9d41dba313d9566120a8ec9d358567bd0)
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_capabilities.c | 11 +++++++++++
+ src/util/virutil.c           | 31 +++++++++++++++++++++++++++++--
+ 2 files changed, 40 insertions(+), 2 deletions(-)
+
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index ba8c717e22..f71cd08f4d 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -55,6 +55,10 @@
+ #include <stdarg.h>
+ #include <sys/utsname.h>
+ 
++#if WITH_CAPNG
++# include <cap-ng.h>
++#endif
++
+ #define VIR_FROM_THIS VIR_FROM_QEMU
+ 
+ VIR_LOG_INIT("qemu.qemu_capabilities");
+@@ -4474,6 +4478,13 @@ virQEMUCapsInitQMPCommandRun(virQEMUCapsInitQMPCommandPtr cmd,
+                                     NULL);
+     virCommandAddEnvPassCommon(cmd->cmd);
+     virCommandClearCaps(cmd->cmd);
++
++#if WITH_CAPNG
++    /* QEMU might run into permission issues, e.g. /dev/sev (0600), override
++     * them just for the purpose of probing */
++    virCommandAllowCap(cmd->cmd, CAP_DAC_OVERRIDE);
++#endif
++
+     virCommandSetGID(cmd->cmd, cmd->runGid);
+     virCommandSetUID(cmd->cmd, cmd->runUid);
+ 
+diff --git a/src/util/virutil.c b/src/util/virutil.c
+index a908422feb..88e17e2c0f 100644
+--- a/src/util/virutil.c
++++ b/src/util/virutil.c
+@@ -1474,8 +1474,10 @@ virSetUIDGIDWithCaps(uid_t uid, gid_t gid, gid_t *groups, int ngroups,
+ {
+     size_t i;
+     int capng_ret, ret = -1;
+-    bool need_setgid = false, need_setuid = false;
++    bool need_setgid = false;
++    bool need_setuid = false;
+     bool need_setpcap = false;
++    const char *capstr = NULL;
+ 
+     /* First drop all caps (unless the requested uid is "unchanged" or
+      * root and clearExistingCaps wasn't requested), then add back
+@@ -1484,14 +1486,18 @@ virSetUIDGIDWithCaps(uid_t uid, gid_t gid, gid_t *groups, int ngroups,
+      */
+ 
+     if (clearExistingCaps || (uid != (uid_t)-1 && uid != 0))
+-       capng_clear(CAPNG_SELECT_BOTH);
++        capng_clear(CAPNG_SELECT_BOTH);
+ 
+     for (i = 0; i <= CAP_LAST_CAP; i++) {
++        capstr = capng_capability_to_name(i);
++
+         if (capBits & (1ULL << i)) {
+             capng_update(CAPNG_ADD,
+                          CAPNG_EFFECTIVE|CAPNG_INHERITABLE|
+                          CAPNG_PERMITTED|CAPNG_BOUNDING_SET,
+                          i);
++
++            VIR_DEBUG("Added '%s' to child capabilities' set", capstr);
+         }
+     }
+ 
+@@ -1551,6 +1557,27 @@ virSetUIDGIDWithCaps(uid_t uid, gid_t gid, gid_t *groups, int ngroups,
+         goto cleanup;
+     }
+ 
++# ifdef PR_CAP_AMBIENT
++    /* we couldn't do this in the loop earlier above, because the capabilities
++     * were not applied yet, since in order to add a capability into the AMBIENT
++     * set, it has to be present in both the PERMITTED and INHERITABLE sets
++     * (capabilities(7))
++     */
++    for (i = 0; i <= CAP_LAST_CAP; i++) {
++        capstr = capng_capability_to_name(i);
++
++        if (capBits & (1ULL << i)) {
++            if (prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_RAISE, i, 0, 0) < 0) {
++                virReportSystemError(errno,
++                                     _("prctl failed to enable '%s' in the "
++                                       "AMBIENT set"),
++                                     capstr);
++                goto cleanup;
++            }
++        }
++    }
++# endif
++
+     /* Set bounding set while we have CAP_SETPCAP.  Unfortunately we cannot
+      * do this if we failed to get the capability above, so ignore the
+      * return value.
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-cgroup-Expose-dev-sev-only-to-domains-that-require-SEV.patch b/SOURCES/libvirt-qemu-cgroup-Expose-dev-sev-only-to-domains-that-require-SEV.patch
new file mode 100644
index 0000000..c641d4b
--- /dev/null
+++ b/SOURCES/libvirt-qemu-cgroup-Expose-dev-sev-only-to-domains-that-require-SEV.patch
@@ -0,0 +1,65 @@
+From 03cf4bcbcfa55297b2359875640819a755b7860c Mon Sep 17 00:00:00 2001
+Message-Id: <03cf4bcbcfa55297b2359875640819a755b7860c@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Fri, 1 Feb 2019 17:21:55 +0100
+Subject: [PATCH] qemu: cgroup: Expose /dev/sev/ only to domains that require
+ SEV
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+SEV has a limit on number of concurrent guests. From security POV we
+should only expose resources (any resources for that matter) to domains
+that truly need them.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit a404ac34768e975bd420d1eeac3811563da67e3f)
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1665400
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_cgroup.c | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
+index fd54333fb9..9f2fc1b062 100644
+--- a/src/qemu/qemu_cgroup.c
++++ b/src/qemu/qemu_cgroup.c
+@@ -695,6 +695,22 @@ qemuTeardownChardevCgroup(virDomainObjPtr vm,
+ }
+ 
+ 
++static int
++qemuSetupSEVCgroup(virDomainObjPtr vm)
++{
++    qemuDomainObjPrivatePtr priv = vm->privateData;
++    int ret;
++
++    if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICES))
++        return 0;
++
++    ret = virCgroupAllowDevicePath(priv->cgroup, "/dev/sev",
++                                   VIR_CGROUP_DEVICE_RW, false);
++    virDomainAuditCgroupPath(vm, priv->cgroup, "allow", "/dev/sev",
++                             "rw", ret);
++    return ret;
++}
++
+ static int
+ qemuSetupDevicesCgroup(virDomainObjPtr vm)
+ {
+@@ -802,6 +818,9 @@ qemuSetupDevicesCgroup(virDomainObjPtr vm)
+             goto cleanup;
+     }
+ 
++    if (vm->def->sev && qemuSetupSEVCgroup(vm) < 0)
++        goto cleanup;
++
+     ret = 0;
+  cleanup:
+     virObjectUnref(cfg);
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-command-Don-t-format-image-properties-for-empty-drive.patch b/SOURCES/libvirt-qemu-command-Don-t-format-image-properties-for-empty-drive.patch
new file mode 100644
index 0000000..63a01c3
--- /dev/null
+++ b/SOURCES/libvirt-qemu-command-Don-t-format-image-properties-for-empty-drive.patch
@@ -0,0 +1,143 @@
+From 47660a5a575b406cfe09ad0f7fae56a7ae429c6c Mon Sep 17 00:00:00 2001
+Message-Id: <47660a5a575b406cfe09ad0f7fae56a7ae429c6c@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Mon, 21 Jan 2019 18:43:13 +0100
+Subject: [PATCH] qemu: command: Don't format image properties for empty -drive
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+If a -drive has no image, using image properties makes qemu whine that
+they should not be used.
+
+This patch stops formating cache/readonly/... for empty drives
+for the pre-blockdev syntax. Unfortunately those parameters can't be
+added later when inserting media, but on the other hand qemu will start
+with an empty drive.
+
+Since we already were able to start a VM with such config previously due
+to qemu ignoring them I've opted just to skip formatting them.
+Additionally with -blockdev support it will work as expected as the
+image properties will be formatted when adding the image itself which is
+not possible without it.
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1651457
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit f80eae8c2ae0c62ecaa550ab6353cf871bb17d4e)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1553255
+
+ Conflicts:
+	src/qemu/qemu_command.c
+	tests/qemuxml2argvdata/disk-cdrom.args
+            - context: bootindex not yet assumed, 'boot=on' code still
+            present
+	tests/qemuxml2argvdata/disk-cdrom.x86_64-2.12.0.args
+	tests/qemuxml2argvdata/disk-cdrom.x86_64-latest.args
+            - missing refactor to capability file based tests
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_command.c                      | 55 ++++++++++----------
+ tests/qemuxml2argvdata/disk-cdrom-empty.args |  2 +-
+ tests/qemuxml2argvdata/disk-cdrom.args       |  2 +-
+ 3 files changed, 30 insertions(+), 29 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index c706a4b095..e153c011f6 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -1695,37 +1695,38 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
+         disk->bus != VIR_DOMAIN_DISK_BUS_IDE)
+         virBufferAddLit(&opt, ",boot=on");
+ 
+-    if (disk->src->readonly)
+-        virBufferAddLit(&opt, ",readonly=on");
++    if (!virStorageSourceIsEmpty(disk->src)) {
++        if (disk->src->readonly)
++            virBufferAddLit(&opt, ",readonly=on");
+ 
++        if (disk->cachemode) {
++            virBufferAsprintf(&opt, ",cache=%s",
++                              qemuDiskCacheV2TypeToString(disk->cachemode));
++        }
+ 
+-    if (disk->cachemode) {
+-        virBufferAsprintf(&opt, ",cache=%s",
+-                          qemuDiskCacheV2TypeToString(disk->cachemode));
++        if (disk->copy_on_read) {
++            virBufferAsprintf(&opt, ",copy-on-read=%s",
++                              virTristateSwitchTypeToString(disk->copy_on_read));
++        }
++
++        if (disk->discard) {
++            virBufferAsprintf(&opt, ",discard=%s",
++                              virDomainDiskDiscardTypeToString(disk->discard));
++        }
++
++        if (detect_zeroes) {
++            virBufferAsprintf(&opt, ",detect-zeroes=%s",
++                              virDomainDiskDetectZeroesTypeToString(detect_zeroes));
++        }
++
++        if (disk->iomode) {
++            virBufferAsprintf(&opt, ",aio=%s",
++                              virDomainDiskIoTypeToString(disk->iomode));
++        }
++
++        qemuBuildDiskThrottling(disk, &opt);
+     }
+ 
+-    if (disk->copy_on_read) {
+-        virBufferAsprintf(&opt, ",copy-on-read=%s",
+-                          virTristateSwitchTypeToString(disk->copy_on_read));
+-    }
+-
+-    if (disk->discard) {
+-        virBufferAsprintf(&opt, ",discard=%s",
+-                          virDomainDiskDiscardTypeToString(disk->discard));
+-    }
+-
+-    if (detect_zeroes) {
+-        virBufferAsprintf(&opt, ",detect-zeroes=%s",
+-                          virDomainDiskDetectZeroesTypeToString(detect_zeroes));
+-    }
+-
+-    if (disk->iomode) {
+-        virBufferAsprintf(&opt, ",aio=%s",
+-                          virDomainDiskIoTypeToString(disk->iomode));
+-    }
+-
+-    qemuBuildDiskThrottling(disk, &opt);
+-
+     if (virBufferCheckError(&opt) < 0)
+         goto error;
+ 
+diff --git a/tests/qemuxml2argvdata/disk-cdrom-empty.args b/tests/qemuxml2argvdata/disk-cdrom-empty.args
+index 1cbc76ab86..b84bdda143 100644
+--- a/tests/qemuxml2argvdata/disk-cdrom-empty.args
++++ b/tests/qemuxml2argvdata/disk-cdrom-empty.args
+@@ -24,5 +24,5 @@ server,nowait \
+ -usb \
+ -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+ -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+--drive if=none,id=drive-ide0-1-0,media=cdrom,readonly=on \
++-drive if=none,id=drive-ide0-1-0,media=cdrom \
+ -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0
+diff --git a/tests/qemuxml2argvdata/disk-cdrom.args b/tests/qemuxml2argvdata/disk-cdrom.args
+index 547263cbd8..f519ea5236 100644
+--- a/tests/qemuxml2argvdata/disk-cdrom.args
++++ b/tests/qemuxml2argvdata/disk-cdrom.args
+@@ -27,5 +27,5 @@ server,nowait \
+ -drive file=/root/boot.iso,format=raw,if=none,id=drive-ide0-0-1,media=cdrom,\
+ readonly=on \
+ -device ide-drive,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 \
+--drive if=none,id=drive-ide0-1-0,media=cdrom,readonly=on,cache=none \
++-drive if=none,id=drive-ide0-1-0,media=cdrom \
+ -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-command-Don-t-skip-readonly-and-throttling-info-for-empty-drive.patch b/SOURCES/libvirt-qemu-command-Don-t-skip-readonly-and-throttling-info-for-empty-drive.patch
new file mode 100644
index 0000000..8acc105
--- /dev/null
+++ b/SOURCES/libvirt-qemu-command-Don-t-skip-readonly-and-throttling-info-for-empty-drive.patch
@@ -0,0 +1,108 @@
+From 56be87fe948f7534878880cb300f91550361c062 Mon Sep 17 00:00:00 2001
+Message-Id: <56be87fe948f7534878880cb300f91550361c062@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Mon, 4 Feb 2019 12:53:38 +0100
+Subject: [PATCH] qemu: command: Don't skip 'readonly' and throttling info for
+ empty drive
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In commit f80eae8c2ae I was too agresive in removing properties of
+-drive for empty drives. It turns out that qemu actually persists the
+state of 'readonly' and the throttling information even for the empty
+drive.
+
+Removing 'readonly' thus made qemu open any subsequent images added via
+the 'change' command as RW which was forbidden by selinux thanks to the
+restrictive sVirt label for readonly media.
+
+Fix this by formating the property again and bump the tests and leave a
+note detailing why the rest of the properties needs to be skipped.
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 6db0d033839807aec885e10b5a45748da016e261)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1670337
+
+ Conflicts:
+        src/qemu/qemu_command.c
+        tests/qemuxml2argvdata/disk-cdrom.args
+            - context: bootindex not yet assumed, 'boot=on' code still
+            present
+        tests/qemuxml2argvdata/disk-cdrom.x86_64-2.12.0.args
+        tests/qemuxml2argvdata/disk-cdrom.x86_64-latest.args
+            - missing refactor to capability file based tests
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_command.c                      | 18 +++++++++++++-----
+ tests/qemuxml2argvdata/disk-cdrom-empty.args |  2 +-
+ tests/qemuxml2argvdata/disk-cdrom.args       |  2 +-
+ 3 files changed, 15 insertions(+), 7 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index e153c011f6..66abd3fe86 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -1695,10 +1695,18 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
+         disk->bus != VIR_DOMAIN_DISK_BUS_IDE)
+         virBufferAddLit(&opt, ",boot=on");
+ 
+-    if (!virStorageSourceIsEmpty(disk->src)) {
+-        if (disk->src->readonly)
+-            virBufferAddLit(&opt, ",readonly=on");
++    if (disk->src->readonly)
++        virBufferAddLit(&opt, ",readonly=on");
+ 
++    /* qemu rejects some parameters for an empty -drive, so we need to skip
++     * them in that case:
++     * cache: modifies properties of the format driver which is not present
++     * copy_on_read: really only works for floppies
++     * discard: modifies properties of format driver
++     * detect_zeroes: works but really depends on discard so it's useless
++     * iomode: setting it to 'native' requires a specific cache mode
++     */
++    if (!virStorageSourceIsEmpty(disk->src)) {
+         if (disk->cachemode) {
+             virBufferAsprintf(&opt, ",cache=%s",
+                               qemuDiskCacheV2TypeToString(disk->cachemode));
+@@ -1723,10 +1731,10 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
+             virBufferAsprintf(&opt, ",aio=%s",
+                               virDomainDiskIoTypeToString(disk->iomode));
+         }
+-
+-        qemuBuildDiskThrottling(disk, &opt);
+     }
+ 
++    qemuBuildDiskThrottling(disk, &opt);
++
+     if (virBufferCheckError(&opt) < 0)
+         goto error;
+ 
+diff --git a/tests/qemuxml2argvdata/disk-cdrom-empty.args b/tests/qemuxml2argvdata/disk-cdrom-empty.args
+index b84bdda143..1cbc76ab86 100644
+--- a/tests/qemuxml2argvdata/disk-cdrom-empty.args
++++ b/tests/qemuxml2argvdata/disk-cdrom-empty.args
+@@ -24,5 +24,5 @@ server,nowait \
+ -usb \
+ -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+ -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+--drive if=none,id=drive-ide0-1-0,media=cdrom \
++-drive if=none,id=drive-ide0-1-0,media=cdrom,readonly=on \
+ -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0
+diff --git a/tests/qemuxml2argvdata/disk-cdrom.args b/tests/qemuxml2argvdata/disk-cdrom.args
+index f519ea5236..973d8e9af1 100644
+--- a/tests/qemuxml2argvdata/disk-cdrom.args
++++ b/tests/qemuxml2argvdata/disk-cdrom.args
+@@ -27,5 +27,5 @@ server,nowait \
+ -drive file=/root/boot.iso,format=raw,if=none,id=drive-ide0-0-1,media=cdrom,\
+ readonly=on \
+ -device ide-drive,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 \
+--drive if=none,id=drive-ide0-1-0,media=cdrom \
++-drive if=none,id=drive-ide0-1-0,media=cdrom,readonly=on \
+ -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-command-Enable-formatting-vfio-pci.display-option-onto-cmdline.patch b/SOURCES/libvirt-qemu-command-Enable-formatting-vfio-pci.display-option-onto-cmdline.patch
new file mode 100644
index 0000000..fbf0401
--- /dev/null
+++ b/SOURCES/libvirt-qemu-command-Enable-formatting-vfio-pci.display-option-onto-cmdline.patch
@@ -0,0 +1,479 @@
+From 24aa8ecbce19a6f844669ed4a30010caea06b799 Mon Sep 17 00:00:00 2001
+Message-Id: <24aa8ecbce19a6f844669ed4a30010caea06b799@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:04:03 +0200
+Subject: [PATCH] qemu: command: Enable formatting vfio-pci.display option onto
+ cmdline
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since QEMU 2.12, QEMU understands a new vfio-pci device option 'display'
+which can be used to turn on display capabilities on vgpu-enabled
+mediated devices, IOW emulated GPU devices like QXL will no longer be
+needed with vgpu-enable mdevs.
+QEMU defaults to 'auto' for the 'display' attribute, which is not
+foolproof, so we need to play it safe here and default to display='off'
+if this attribute wasn't provided in the XML explicitly.
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit c0ca6dcf42549855b9ed75031f461a056ae1031c)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_command.c                       |  4 ++
+ .../hostdev-mdev-display-missing-graphics.xml | 35 ++++++++++++++++
+ ...play-spice-egl-headless.x86_64-latest.args | 37 +++++++++++++++++
+ ...ostdev-mdev-display-spice-egl-headless.xml | 40 ++++++++++++++++++
+ ...ev-display-spice-opengl.x86_64-latest.args | 36 ++++++++++++++++
+ .../hostdev-mdev-display-spice-opengl.xml     | 41 +++++++++++++++++++
+ ...isplay-vnc-egl-headless.x86_64-latest.args | 37 +++++++++++++++++
+ .../hostdev-mdev-display-vnc-egl-headless.xml | 40 ++++++++++++++++++
+ ...ostdev-mdev-display-vnc.x86_64-latest.args | 36 ++++++++++++++++
+ .../hostdev-mdev-display-vnc.xml              | 39 ++++++++++++++++++
+ tests/qemuxml2argvtest.c                      |  7 ++++
+ 11 files changed, 352 insertions(+)
+ create mode 100644 tests/qemuxml2argvdata/hostdev-mdev-display-missing-graphics.xml
+ create mode 100644 tests/qemuxml2argvdata/hostdev-mdev-display-spice-egl-headless.x86_64-latest.args
+ create mode 100644 tests/qemuxml2argvdata/hostdev-mdev-display-spice-egl-headless.xml
+ create mode 100644 tests/qemuxml2argvdata/hostdev-mdev-display-spice-opengl.x86_64-latest.args
+ create mode 100644 tests/qemuxml2argvdata/hostdev-mdev-display-spice-opengl.xml
+ create mode 100644 tests/qemuxml2argvdata/hostdev-mdev-display-vnc-egl-headless.x86_64-latest.args
+ create mode 100644 tests/qemuxml2argvdata/hostdev-mdev-display-vnc-egl-headless.xml
+ create mode 100644 tests/qemuxml2argvdata/hostdev-mdev-display-vnc.x86_64-latest.args
+ create mode 100644 tests/qemuxml2argvdata/hostdev-mdev-display-vnc.xml
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 8915040c6a..1fce45134f 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -5177,6 +5177,10 @@ qemuBuildHostdevMediatedDevStr(const virDomainDef *def,
+     virBufferAdd(&buf, dev_str, -1);
+     virBufferAsprintf(&buf, ",id=%s,sysfsdev=%s", dev->info->alias, mdevPath);
+ 
++    if (mdevsrc->display != VIR_TRISTATE_SWITCH_ABSENT)
++        virBufferAsprintf(&buf, ",display=%s",
++                          virTristateSwitchTypeToString(mdevsrc->display));
++
+     if (qemuBuildDeviceAddressStr(&buf, def, dev->info, qemuCaps) < 0)
+         goto cleanup;
+ 
+diff --git a/tests/qemuxml2argvdata/hostdev-mdev-display-missing-graphics.xml b/tests/qemuxml2argvdata/hostdev-mdev-display-missing-graphics.xml
+new file mode 100644
+index 0000000000..ea559a6444
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hostdev-mdev-display-missing-graphics.xml
+@@ -0,0 +1,35 @@
++<domain type='qemu'>
++  <name>QEMUGuest2</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest2'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <controller type='ide' index='0'>
++    </controller>
++    <hostdev mode='subsystem' type='mdev' model='vfio-pci' display='on'>
++      <source>
++        <address uuid='53764d0e-85a0-42b4-af5c-2046b460b1dc'/>
++      </source>
++    </hostdev>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvdata/hostdev-mdev-display-spice-egl-headless.x86_64-latest.args b/tests/qemuxml2argvdata/hostdev-mdev-display-spice-egl-headless.x86_64-latest.args
+new file mode 100644
+index 0000000000..0ac90c81d2
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hostdev-mdev-display-spice-egl-headless.x86_64-latest.args
+@@ -0,0 +1,37 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=spice \
++/usr/bin/qemu-system-i686 \
++-name guest=QEMUGuest2,debug-threads=on \
++-S \
++-object secret,id=masterKey0,format=raw,\
++file=/tmp/lib/domain--1-QEMUGuest2/master-key.aes \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-realtime mlock=off \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,fd=1729,server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot strict=on \
++-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-drive file=/dev/HostVG/QEMUGuest2,format=raw,if=none,id=drive-ide0-0-0 \
++-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
++-spice port=0,seamless-migration=on \
++-display egl-headless \
++-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,\
++vram64_size_mb=0,vgamem_mb=16,max_outputs=1,bus=pci.0,addr=0x2 \
++-device vfio-pci,id=hostdev0,\
++sysfsdev=/sys/bus/mdev/devices/53764d0e-85a0-42b4-af5c-2046b460b1dc,display=on,\
++bus=pci.0,addr=0x3 \
++-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
++resourcecontrol=deny \
++-msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/hostdev-mdev-display-spice-egl-headless.xml b/tests/qemuxml2argvdata/hostdev-mdev-display-spice-egl-headless.xml
+new file mode 100644
+index 0000000000..c8f10c2f3a
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hostdev-mdev-display-spice-egl-headless.xml
+@@ -0,0 +1,40 @@
++<domain type='qemu' id='1'>
++  <name>QEMUGuest2</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest2'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <controller type='ide' index='0'>
++    </controller>
++    <graphics type='spice'/>
++    <graphics type='egl-headless'/>
++    <hostdev mode='subsystem' type='mdev' model='vfio-pci' display='on'>
++      <source>
++        <address uuid='53764d0e-85a0-42b4-af5c-2046b460b1dc'/>
++      </source>
++    </hostdev>
++    <video>
++      <model type='qxl' heads='1'/>
++    </video>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvdata/hostdev-mdev-display-spice-opengl.x86_64-latest.args b/tests/qemuxml2argvdata/hostdev-mdev-display-spice-opengl.x86_64-latest.args
+new file mode 100644
+index 0000000000..1fd9fdaa16
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hostdev-mdev-display-spice-opengl.x86_64-latest.args
+@@ -0,0 +1,36 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=spice \
++/usr/bin/qemu-system-i686 \
++-name guest=QEMUGuest2,debug-threads=on \
++-S \
++-object secret,id=masterKey0,format=raw,\
++file=/tmp/lib/domain--1-QEMUGuest2/master-key.aes \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-realtime mlock=off \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,fd=1729,server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot strict=on \
++-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-drive file=/dev/HostVG/QEMUGuest2,format=raw,if=none,id=drive-ide0-0-0 \
++-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
++-spice port=0,gl=on,rendernode=/dev/dri/foo,seamless-migration=on \
++-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,\
++vram64_size_mb=0,vgamem_mb=16,max_outputs=1,bus=pci.0,addr=0x2 \
++-device vfio-pci,id=hostdev0,\
++sysfsdev=/sys/bus/mdev/devices/53764d0e-85a0-42b4-af5c-2046b460b1dc,display=on,\
++bus=pci.0,addr=0x3 \
++-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
++resourcecontrol=deny \
++-msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/hostdev-mdev-display-spice-opengl.xml b/tests/qemuxml2argvdata/hostdev-mdev-display-spice-opengl.xml
+new file mode 100644
+index 0000000000..18c9817608
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hostdev-mdev-display-spice-opengl.xml
+@@ -0,0 +1,41 @@
++<domain type='qemu' id='1'>
++  <name>QEMUGuest2</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest2'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <controller type='ide' index='0'>
++    </controller>
++    <graphics type='spice'>
++      <gl enable='yes' rendernode='/dev/dri/foo'/>
++    </graphics>
++    <hostdev mode='subsystem' type='mdev' model='vfio-pci' display='on'>
++      <source>
++        <address uuid='53764d0e-85a0-42b4-af5c-2046b460b1dc'/>
++      </source>
++    </hostdev>
++    <video>
++      <model type='qxl' heads='1'/>
++    </video>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvdata/hostdev-mdev-display-vnc-egl-headless.x86_64-latest.args b/tests/qemuxml2argvdata/hostdev-mdev-display-vnc-egl-headless.x86_64-latest.args
+new file mode 100644
+index 0000000000..cdf545d0e0
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hostdev-mdev-display-vnc-egl-headless.x86_64-latest.args
+@@ -0,0 +1,37 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name guest=QEMUGuest2,debug-threads=on \
++-S \
++-object secret,id=masterKey0,format=raw,\
++file=/tmp/lib/domain--1-QEMUGuest2/master-key.aes \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-realtime mlock=off \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,fd=1729,server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot strict=on \
++-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-drive file=/dev/HostVG/QEMUGuest2,format=raw,if=none,id=drive-ide0-0-0 \
++-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
++-vnc 127.0.0.1:0 \
++-display egl-headless \
++-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,\
++vram64_size_mb=0,vgamem_mb=16,max_outputs=1,bus=pci.0,addr=0x2 \
++-device vfio-pci,id=hostdev0,\
++sysfsdev=/sys/bus/mdev/devices/53764d0e-85a0-42b4-af5c-2046b460b1dc,display=on,\
++bus=pci.0,addr=0x3 \
++-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
++resourcecontrol=deny \
++-msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/hostdev-mdev-display-vnc-egl-headless.xml b/tests/qemuxml2argvdata/hostdev-mdev-display-vnc-egl-headless.xml
+new file mode 100644
+index 0000000000..b3eaeeef13
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hostdev-mdev-display-vnc-egl-headless.xml
+@@ -0,0 +1,40 @@
++<domain type='qemu' id='1'>
++  <name>QEMUGuest2</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest2'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <controller type='ide' index='0'>
++    </controller>
++    <graphics type='vnc'/>
++    <graphics type='egl-headless'/>
++    <hostdev mode='subsystem' type='mdev' model='vfio-pci' display='on'>
++      <source>
++        <address uuid='53764d0e-85a0-42b4-af5c-2046b460b1dc'/>
++      </source>
++    </hostdev>
++    <video>
++      <model type='qxl' heads='1'/>
++    </video>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvdata/hostdev-mdev-display-vnc.x86_64-latest.args b/tests/qemuxml2argvdata/hostdev-mdev-display-vnc.x86_64-latest.args
+new file mode 100644
+index 0000000000..19439afda9
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hostdev-mdev-display-vnc.x86_64-latest.args
+@@ -0,0 +1,36 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name guest=QEMUGuest2,debug-threads=on \
++-S \
++-object secret,id=masterKey0,format=raw,\
++file=/tmp/lib/domain--1-QEMUGuest2/master-key.aes \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-realtime mlock=off \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,fd=1729,server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot strict=on \
++-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-drive file=/dev/HostVG/QEMUGuest2,format=raw,if=none,id=drive-ide0-0-0 \
++-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
++-vnc 127.0.0.1:0 \
++-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,\
++vram64_size_mb=0,vgamem_mb=16,max_outputs=1,bus=pci.0,addr=0x2 \
++-device vfio-pci,id=hostdev0,\
++sysfsdev=/sys/bus/mdev/devices/53764d0e-85a0-42b4-af5c-2046b460b1dc,display=on,\
++bus=pci.0,addr=0x3 \
++-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
++resourcecontrol=deny \
++-msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/hostdev-mdev-display-vnc.xml b/tests/qemuxml2argvdata/hostdev-mdev-display-vnc.xml
+new file mode 100644
+index 0000000000..f5b3575c04
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hostdev-mdev-display-vnc.xml
+@@ -0,0 +1,39 @@
++<domain type='qemu' id='1'>
++  <name>QEMUGuest2</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>219136</memory>
++  <currentMemory unit='KiB'>219136</currentMemory>
++  <vcpu placement='static'>1</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <disk type='block' device='disk'>
++      <driver name='qemu' type='raw'/>
++      <source dev='/dev/HostVG/QEMUGuest2'/>
++      <target dev='hda' bus='ide'/>
++      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
++    </disk>
++    <controller type='usb' index='0'>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <controller type='ide' index='0'>
++    </controller>
++    <graphics type='vnc'/>
++    <hostdev mode='subsystem' type='mdev' model='vfio-pci' display='on'>
++      <source>
++        <address uuid='53764d0e-85a0-42b4-af5c-2046b460b1dc'/>
++      </source>
++    </hostdev>
++    <video>
++      <model type='qxl' heads='1'/>
++    </video>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 848e40440a..9237a4fb89 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -1591,6 +1591,13 @@ mymain(void)
+             QEMU_CAPS_DEVICE_VFIO_PCI);
+     DO_TEST_PARSE_ERROR("hostdev-mdev-invalid-target-address",
+             QEMU_CAPS_DEVICE_VFIO_PCI);
++    DO_TEST_CAPS_LATEST("hostdev-mdev-display-spice-opengl");
++    DO_TEST_CAPS_LATEST("hostdev-mdev-display-spice-egl-headless");
++    DO_TEST_CAPS_LATEST("hostdev-mdev-display-vnc");
++    DO_TEST_CAPS_LATEST("hostdev-mdev-display-vnc-egl-headless");
++    DO_TEST_PARSE_ERROR("hostdev-mdev-display-missing-graphics",
++            QEMU_CAPS_DEVICE_VFIO_PCI,
++            QEMU_CAPS_VFIO_PCI_DISPLAY);
+     DO_TEST("pci-rom", NONE);
+     DO_TEST("pci-rom-disabled", NONE);
+     DO_TEST("pci-rom-disabled-invalid", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-command-Move-graphics-iteration-to-its-own-function.patch b/SOURCES/libvirt-qemu-command-Move-graphics-iteration-to-its-own-function.patch
new file mode 100644
index 0000000..053f110
--- /dev/null
+++ b/SOURCES/libvirt-qemu-command-Move-graphics-iteration-to-its-own-function.patch
@@ -0,0 +1,105 @@
+From 5026bff75d5f489281c7f8ae3fe2c20e7679d5d6 Mon Sep 17 00:00:00 2001
+Message-Id: <5026bff75d5f489281c7f8ae3fe2c20e7679d5d6@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:49 +0200
+Subject: [PATCH] qemu: command: Move graphics iteration to its own function
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+It should be the command line helper who takes care of the iteration
+rather than the caller.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit afc107c20f6dc40529154a361222f9eca0cec94c)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_command.c | 57 ++++++++++++++++++++++++++---------------
+ 1 file changed, 36 insertions(+), 21 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index f38ae668a7..8a8cbfd7f6 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -8212,26 +8212,44 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
+ static int
+ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg,
+                              virCommandPtr cmd,
+-                             virQEMUCapsPtr qemuCaps,
+-                             virDomainGraphicsDefPtr graphics)
++                             virDomainDefPtr def,
++                             virQEMUCapsPtr qemuCaps)
+ {
+-    switch (graphics->type) {
+-    case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
+-        return qemuBuildGraphicsSDLCommandLine(cfg, cmd, qemuCaps, graphics);
++    size_t i;
+ 
+-    case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
+-        return qemuBuildGraphicsVNCCommandLine(cfg, cmd, qemuCaps, graphics);
++    for (i = 0; i < def->ngraphics; i++) {
++        virDomainGraphicsDefPtr graphics = def->graphics[i];
+ 
+-    case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
+-        return qemuBuildGraphicsSPICECommandLine(cfg, cmd, qemuCaps, graphics);
++        switch (graphics->type) {
++        case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
++            if (qemuBuildGraphicsSDLCommandLine(cfg, cmd,
++                                                qemuCaps, graphics) < 0)
++                return -1;
+ 
+-    case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+-    case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
+-    case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+-                       _("unsupported graphics type '%s'"),
+-                       virDomainGraphicsTypeToString(graphics->type));
+-        return -1;
++            break;
++        case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
++            if (qemuBuildGraphicsVNCCommandLine(cfg, cmd,
++                                                qemuCaps, graphics) < 0)
++                return -1;
++
++            break;
++        case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
++            if (qemuBuildGraphicsSPICECommandLine(cfg, cmd,
++                                                  qemuCaps, graphics) < 0)
++                return -1;
++
++            break;
++        case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
++        case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++                           _("unsupported graphics type '%s'"),
++                           virDomainGraphicsTypeToString(graphics->type));
++            return -1;
++        case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
++        default:
++            virReportEnumRangeError(virDomainGraphicsType, graphics->type);
++            return -1;
++        }
+     }
+ 
+     return 0;
+@@ -10382,11 +10400,8 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
+     if (qemuBuildInputCommandLine(cmd, def, qemuCaps) < 0)
+         goto error;
+ 
+-    for (i = 0; i < def->ngraphics; ++i) {
+-        if (qemuBuildGraphicsCommandLine(cfg, cmd, qemuCaps,
+-                                         def->graphics[i]) < 0)
+-            goto error;
+-    }
++    if (qemuBuildGraphicsCommandLine(cfg, cmd, def, qemuCaps) < 0)
++        goto error;
+ 
+     if (qemuBuildVideoCommandLine(cmd, def, qemuCaps) < 0)
+         goto error;
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-conf-Remove-dev-sev-from-the-default-cgroup-device-acl-list.patch b/SOURCES/libvirt-qemu-conf-Remove-dev-sev-from-the-default-cgroup-device-acl-list.patch
new file mode 100644
index 0000000..e16cdfa
--- /dev/null
+++ b/SOURCES/libvirt-qemu-conf-Remove-dev-sev-from-the-default-cgroup-device-acl-list.patch
@@ -0,0 +1,81 @@
+From 17c0f51fb9981dbd372a24952b483a14222674ec Mon Sep 17 00:00:00 2001
+Message-Id: <17c0f51fb9981dbd372a24952b483a14222674ec@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Fri, 1 Feb 2019 17:21:54 +0100
+Subject: [PATCH] qemu: conf: Remove /dev/sev from the default cgroup device
+ acl list
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We should not give domains access to something they don't necessarily
+need by default. Remove it from the qemu driver docs too.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit b6440119185a4e307654a8d26d6d551a2675bf82)
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1665400
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ docs/drvqemu.html.in               | 2 +-
+ src/qemu/qemu.conf                 | 2 +-
+ src/qemu/qemu_cgroup.c             | 2 +-
+ src/qemu/test_libvirtd_qemu.aug.in | 1 -
+ 4 files changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/docs/drvqemu.html.in b/docs/drvqemu.html.in
+index d51ccf2412..a692a6dab6 100644
+--- a/docs/drvqemu.html.in
++++ b/docs/drvqemu.html.in
+@@ -396,7 +396,7 @@ chmod o+x /path/to/directory
+ /dev/null, /dev/full, /dev/zero,
+ /dev/random, /dev/urandom,
+ /dev/ptmx, /dev/kvm, /dev/kqemu,
+-/dev/rtc, /dev/hpet, /dev/sev
++/dev/rtc, /dev/hpet
+ </pre>
+ 
+     <p>
+diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf
+index cd57b3cc69..76afe88b0c 100644
+--- a/src/qemu/qemu.conf
++++ b/src/qemu/qemu.conf
+@@ -485,7 +485,7 @@
+ #    "/dev/null", "/dev/full", "/dev/zero",
+ #    "/dev/random", "/dev/urandom",
+ #    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
+-#    "/dev/rtc","/dev/hpet", "/dev/sev"
++#    "/dev/rtc","/dev/hpet"
+ #]
+ #
+ # RDMA migration requires the following extra files to be added to the list:
+diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
+index c8fba7f9e6..fd54333fb9 100644
+--- a/src/qemu/qemu_cgroup.c
++++ b/src/qemu/qemu_cgroup.c
+@@ -48,7 +48,7 @@ const char *const defaultDeviceACL[] = {
+     "/dev/null", "/dev/full", "/dev/zero",
+     "/dev/random", "/dev/urandom",
+     "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
+-    "/dev/rtc", "/dev/hpet", "/dev/sev",
++    "/dev/rtc", "/dev/hpet",
+     NULL,
+ };
+ #define DEVICE_PTY_MAJOR 136
+diff --git a/src/qemu/test_libvirtd_qemu.aug.in b/src/qemu/test_libvirtd_qemu.aug.in
+index f1e8806ad2..61690ee92c 100644
+--- a/src/qemu/test_libvirtd_qemu.aug.in
++++ b/src/qemu/test_libvirtd_qemu.aug.in
+@@ -62,7 +62,6 @@ module Test_libvirtd_qemu =
+     { "8" = "/dev/kqemu" }
+     { "9" = "/dev/rtc" }
+     { "10" = "/dev/hpet" }
+-    { "11" = "/dev/sev" }
+ }
+ { "save_image_format" = "raw" }
+ { "dump_image_format" = "raw" }
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-consolidate-parameters-of-qemuBuildChrChardevStr-into-flags.patch b/SOURCES/libvirt-qemu-consolidate-parameters-of-qemuBuildChrChardevStr-into-flags.patch
new file mode 100644
index 0000000..3478c14
--- /dev/null
+++ b/SOURCES/libvirt-qemu-consolidate-parameters-of-qemuBuildChrChardevStr-into-flags.patch
@@ -0,0 +1,313 @@
+From 018a9185c4889bdd49d0e27cd81d324a1477d9af Mon Sep 17 00:00:00 2001
+Message-Id: <018a9185c4889bdd49d0e27cd81d324a1477d9af@dist-git>
+From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
+Date: Fri, 6 Jul 2018 15:47:00 +0100
+Subject: [PATCH] qemu: consolidate parameters of qemuBuildChrChardevStr into
+ flags
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1597940
+
+There are two boolean parameters passed to qemuBuildChrChardevStr,
+and soon there will be a third. It will be clearer to understand
+from callers' POV if we use named flags instead.
+
+Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 0140d4c59b7fb26432b520bb7e85bd6834f560b0)
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_command.c | 94 ++++++++++++++++++++++++++---------------
+ 1 file changed, 61 insertions(+), 33 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 41050bfea3..0c3ce98caf 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -4934,6 +4934,12 @@ qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev)
+     return -1;
+ }
+ 
++
++enum {
++    QEMU_BUILD_CHARDEV_TCP_NOWAIT = (1 << 0),
++    QEMU_BUILD_CHARDEV_FILE_LOGD  = (1 << 1),
++};
++
+ /* This function outputs a -chardev command line option which describes only the
+  * host side of the character device */
+ static char *
+@@ -4945,8 +4951,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
+                        const virDomainChrSourceDef *dev,
+                        const char *alias,
+                        virQEMUCapsPtr qemuCaps,
+-                       bool nowait,
+-                       bool chardevStdioLogd)
++                       unsigned int flags)
+ {
+     virBuffer buf = VIR_BUFFER_INITIALIZER;
+     bool telnet;
+@@ -4985,7 +4990,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
+                            _("append not supported in this QEMU binary"));
+             goto cleanup;
+         }
+-        if (qemuBuildChrChardevFileStr(chardevStdioLogd ? logManager : NULL,
++        if (qemuBuildChrChardevFileStr(flags & QEMU_BUILD_CHARDEV_FILE_LOGD ?
++                                       logManager : NULL,
+                                        cmd, def, &buf,
+                                        "path", dev->data.file.path,
+                                        "append", dev->data.file.append) < 0)
+@@ -5031,8 +5037,11 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
+                           dev->data.tcp.service,
+                           telnet ? ",telnet" : "");
+ 
+-        if (dev->data.tcp.listen)
+-            virBufferAdd(&buf, nowait ? ",server,nowait" : ",server", -1);
++        if (dev->data.tcp.listen) {
++            virBufferAddLit(&buf, ",server");
++            if (flags & QEMU_BUILD_CHARDEV_TCP_NOWAIT)
++                virBufferAddLit(&buf, ",nowait");
++        }
+ 
+         qemuBuildChrChardevReconnectStr(&buf, &dev->data.tcp.reconnect);
+ 
+@@ -5090,8 +5099,11 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
+             virBufferAsprintf(&buf, "socket,id=%s,path=", charAlias);
+             virQEMUBuildBufferEscapeComma(&buf, dev->data.nix.path);
+         }
+-        if (dev->data.nix.listen)
+-            virBufferAdd(&buf, nowait ? ",server,nowait" : ",server", -1);
++        if (dev->data.nix.listen) {
++            virBufferAddLit(&buf, ",server");
++            if (flags & QEMU_BUILD_CHARDEV_TCP_NOWAIT)
++                virBufferAddLit(&buf, ",nowait");
++        }
+ 
+         qemuBuildChrChardevReconnectStr(&buf, &dev->data.nix.reconnect);
+         break;
+@@ -5425,6 +5437,9 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
+                             qemuDomainObjPrivatePtr priv)
+ {
+     char *chrdev;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    if (priv->chardevStdioLogd)
++        cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+     if (!priv->monConfig)
+         return 0;
+@@ -5432,8 +5447,7 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
+     if (!(chrdev = qemuBuildChrChardevStr(logManager, secManager,
+                                           cmd, cfg, def,
+                                           priv->monConfig, "monitor",
+-                                          priv->qemuCaps, true,
+-                                          priv->chardevStdioLogd)))
++                                          priv->qemuCaps, cdevflags)))
+         return -1;
+     virCommandAddArg(cmd, "-chardev");
+     virCommandAddArg(cmd, chrdev);
+@@ -5558,6 +5572,9 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager,
+                              char **chr,
+                              bool chardevStdioLogd)
+ {
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    if (chardevStdioLogd)
++        cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+     *chr = NULL;
+ 
+     switch ((virDomainRNGBackend) rng->backend) {
+@@ -5570,8 +5587,8 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager,
+         if (!(*chr = qemuBuildChrChardevStr(logManager, secManager,
+                                             cmd, cfg, def,
+                                             rng->source.chardev,
+-                                            rng->info.alias, qemuCaps, true,
+-                                            chardevStdioLogd)))
++                                            rng->info.alias, qemuCaps,
++                                            cdevflags)))
+             return -1;
+     }
+ 
+@@ -8243,8 +8260,7 @@ qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver,
+         if (!(chardev = qemuBuildChrChardevStr(logManager, secManager,
+                                                cmd, cfg, def,
+                                                net->data.vhostuser,
+-                                               net->info.alias, qemuCaps, false,
+-                                               false)))
++                                               net->info.alias, qemuCaps, 0)))
+             goto cleanup;
+         break;
+ 
+@@ -8724,6 +8740,9 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager,
+     virBuffer opt = VIR_BUFFER_INITIALIZER;
+     const char *database;
+     const char *contAlias = NULL;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    if (chardevStdioLogd)
++        cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+     if (!def->nsmartcards)
+         return 0;
+@@ -8789,8 +8808,7 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager,
+                                               cmd, cfg, def,
+                                               smartcard->data.passthru,
+                                               smartcard->info.alias,
+-                                              qemuCaps, true,
+-                                              chardevStdioLogd))) {
++                                              qemuCaps, cdevflags))) {
+             virBufferFreeAndReset(&opt);
+             return -1;
+         }
+@@ -8958,6 +8976,9 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
+     virBuffer buf = VIR_BUFFER_INITIALIZER;
+     char *devstr = NULL;
+     int rc;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    if (chardevStdioLogd)
++        cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+     if (shmem->size) {
+         /*
+@@ -9021,8 +9042,8 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
+         devstr = qemuBuildChrChardevStr(logManager, secManager,
+                                         cmd, cfg, def,
+                                         &shmem->server.chr,
+-                                        shmem->info.alias, qemuCaps, true,
+-                                        chardevStdioLogd);
++                                        shmem->info.alias, qemuCaps,
++                                        cdevflags);
+         if (!devstr)
+             return -1;
+ 
+@@ -9115,6 +9136,9 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager,
+ {
+     size_t i;
+     bool havespice = false;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    if (chardevStdioLogd)
++        cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+     if (def->nserials) {
+         for (i = 0; i < def->ngraphics && !havespice; i++) {
+@@ -9134,8 +9158,7 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager,
+                                               cmd, cfg, def,
+                                               serial->source,
+                                               serial->info.alias,
+-                                              qemuCaps, true,
+-                                              chardevStdioLogd)))
++                                              qemuCaps, cdevflags)))
+             return -1;
+         virCommandAddArg(cmd, "-chardev");
+         virCommandAddArg(cmd, devstr);
+@@ -9176,6 +9199,9 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager,
+                               bool chardevStdioLogd)
+ {
+     size_t i;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    if (chardevStdioLogd)
++        cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+     for (i = 0; i < def->nparallels; i++) {
+         virDomainChrDefPtr parallel = def->parallels[i];
+@@ -9185,8 +9211,7 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager,
+                                               cmd, cfg, def,
+                                               parallel->source,
+                                               parallel->info.alias,
+-                                              qemuCaps, true,
+-                                              chardevStdioLogd)))
++                                              qemuCaps, cdevflags)))
+             return -1;
+         virCommandAddArg(cmd, "-chardev");
+         virCommandAddArg(cmd, devstr);
+@@ -9211,6 +9236,9 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
+                              bool chardevStdioLogd)
+ {
+     size_t i;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    if (chardevStdioLogd)
++        cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+     for (i = 0; i < def->nchannels; i++) {
+         virDomainChrDefPtr channel = def->channels[i];
+@@ -9222,8 +9250,7 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
+                                                   cmd, cfg, def,
+                                                   channel->source,
+                                                   channel->info.alias,
+-                                                  qemuCaps, true,
+-                                                  chardevStdioLogd)))
++                                                  qemuCaps, cdevflags)))
+                 return -1;
+             virCommandAddArg(cmd, "-chardev");
+             virCommandAddArg(cmd, devstr);
+@@ -9240,8 +9267,7 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
+                                                   cmd, cfg, def,
+                                                   channel->source,
+                                                   channel->info.alias,
+-                                                  qemuCaps, true,
+-                                                  chardevStdioLogd)))
++                                                  qemuCaps, cdevflags)))
+                 return -1;
+             virCommandAddArg(cmd, "-chardev");
+             virCommandAddArg(cmd, devstr);
+@@ -9267,6 +9293,9 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
+                             bool chardevStdioLogd)
+ {
+     size_t i;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    if (chardevStdioLogd)
++        cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+     /* Explicit console devices */
+     for (i = 0; i < def->nconsoles; i++) {
+@@ -9285,8 +9314,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
+                                                   cmd, cfg, def,
+                                                   console->source,
+                                                   console->info.alias,
+-                                                  qemuCaps, true,
+-                                                  chardevStdioLogd)))
++                                                  qemuCaps, cdevflags)))
+                 return -1;
+             virCommandAddArg(cmd, "-chardev");
+             virCommandAddArg(cmd, devstr);
+@@ -9307,8 +9335,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
+                                                   cmd, cfg, def,
+                                                   console->source,
+                                                   console->info.alias,
+-                                                  qemuCaps, true,
+-                                                  chardevStdioLogd)))
++                                                  qemuCaps, cdevflags)))
+                 return -1;
+             virCommandAddArg(cmd, "-chardev");
+             virCommandAddArg(cmd, devstr);
+@@ -9323,8 +9350,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
+                                                   cmd, cfg, def,
+                                                   console->source,
+                                                   console->info.alias,
+-                                                  qemuCaps, true,
+-                                                  chardevStdioLogd)))
++                                                  qemuCaps, cdevflags)))
+                 return -1;
+             virCommandAddArg(cmd, "-chardev");
+             virCommandAddArg(cmd, devstr);
+@@ -9447,6 +9473,9 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager,
+                              bool chardevStdioLogd)
+ {
+     size_t i;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    if (chardevStdioLogd)
++        cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+     for (i = 0; i < def->nredirdevs; i++) {
+         virDomainRedirdevDefPtr redirdev = def->redirdevs[i];
+@@ -9456,8 +9485,7 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager,
+                                               cmd, cfg, def,
+                                               redirdev->source,
+                                               redirdev->info.alias,
+-                                              qemuCaps, true,
+-                                              chardevStdioLogd))) {
++                                              qemuCaps, cdevflags))) {
+             return -1;
+         }
+ 
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-domain-Add-dev-sev-into-the-domain-mount-namespace-selectively.patch b/SOURCES/libvirt-qemu-domain-Add-dev-sev-into-the-domain-mount-namespace-selectively.patch
new file mode 100644
index 0000000..6130e0b
--- /dev/null
+++ b/SOURCES/libvirt-qemu-domain-Add-dev-sev-into-the-domain-mount-namespace-selectively.patch
@@ -0,0 +1,75 @@
+From d0f98bd3ab59c5c4fa085f22df4763caabcef3b0 Mon Sep 17 00:00:00 2001
+Message-Id: <d0f98bd3ab59c5c4fa085f22df4763caabcef3b0@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Fri, 1 Feb 2019 17:21:56 +0100
+Subject: [PATCH] qemu: domain: Add /dev/sev into the domain mount namespace
+ selectively
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Instead of exposing /dev/sev to every domain, do it selectively.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 6fd4c8f8785a063112c8161a3a3f5ad3cb6647ea)
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1665400
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_domain.c | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 0ddc6ef4a7..c530733e97 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -118,6 +118,7 @@ VIR_ENUM_IMPL(qemuDomainNamespace, QEMU_DOMAIN_NS_LAST,
+ #define DEVPREFIX "/dev/"
+ #define DEV_VFIO "/dev/vfio/vfio"
+ #define DEVICE_MAPPER_CONTROL_PATH "/dev/mapper/control"
++#define DEV_SEV "/dev/sev"
+ 
+ 
+ struct _qemuDomainLogContext {
+@@ -11652,6 +11653,26 @@ qemuDomainSetupLoader(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED,
+ }
+ 
+ 
++static int
++qemuDomainSetupLaunchSecurity(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED,
++                              virDomainObjPtr vm,
++                              const struct qemuDomainCreateDeviceData *data)
++{
++    virDomainSEVDefPtr sev = vm->def->sev;
++
++    if (!sev || sev->sectype != VIR_DOMAIN_LAUNCH_SECURITY_SEV)
++        return 0;
++
++    VIR_DEBUG("Setting up launch security");
++
++    if (qemuDomainCreateDevice(DEV_SEV, data, false) < 0)
++        return -1;
++
++    VIR_DEBUG("Set up launch security");
++    return 0;
++}
++
++
+ int
+ qemuDomainBuildNamespace(virQEMUDriverConfigPtr cfg,
+                          virSecurityManagerPtr mgr,
+@@ -11723,6 +11744,9 @@ qemuDomainBuildNamespace(virQEMUDriverConfigPtr cfg,
+     if (qemuDomainSetupLoader(cfg, vm, &data) < 0)
+         goto cleanup;
+ 
++    if (qemuDomainSetupLaunchSecurity(cfg, vm, &data) < 0)
++        goto cleanup;
++
+     /* Save some mount points because we want to share them with the host */
+     for (i = 0; i < ndevMountsPath; i++) {
+         struct stat sb;
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-don-t-use-chardev-FD-passing-for-vhostuser-backend.patch b/SOURCES/libvirt-qemu-don-t-use-chardev-FD-passing-for-vhostuser-backend.patch
new file mode 100644
index 0000000..300cf37
--- /dev/null
+++ b/SOURCES/libvirt-qemu-don-t-use-chardev-FD-passing-for-vhostuser-backend.patch
@@ -0,0 +1,171 @@
+From 2f53c51bac4f9a9c7e490a13f1510eb553046bc3 Mon Sep 17 00:00:00 2001
+Message-Id: <2f53c51bac4f9a9c7e490a13f1510eb553046bc3@dist-git>
+From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
+Date: Fri, 6 Jul 2018 15:47:01 +0100
+Subject: [PATCH] qemu: don't use chardev FD passing for vhostuser backend
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1597940
+
+QEMU chardevs have a bug which makes the vhostuser backend complain
+about lack of support for FD passing when validating the chardev.
+While this is ultimately QEMU's responsibility to fix, libvirt needs to
+avoid tickling the bug.
+
+Simply disabling chardev FD passing just for vhostuser's chardev is
+the most prudent approach, avoiding need for a QEMU version number
+check.
+
+Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit ed5aa85f371aebb0103e712f9a103d011ab9ae43)
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_command.c                   | 31 +++++++++++++++--------
+ tests/qemuxml2argvdata/net-vhostuser.args |  3 +--
+ tests/qemuxml2argvtest.c                  |  2 +-
+ 3 files changed, 23 insertions(+), 13 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 0c3ce98caf..637e787d25 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -4938,6 +4938,7 @@ qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev)
+ enum {
+     QEMU_BUILD_CHARDEV_TCP_NOWAIT = (1 << 0),
+     QEMU_BUILD_CHARDEV_FILE_LOGD  = (1 << 1),
++    QEMU_BUILD_CHARDEV_UNIX_FD_PASS = (1 << 2),
+ };
+ 
+ /* This function outputs a -chardev command line option which describes only the
+@@ -5081,7 +5082,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
+         break;
+ 
+     case VIR_DOMAIN_CHR_TYPE_UNIX:
+-        if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS)) {
++        if ((flags & QEMU_BUILD_CHARDEV_UNIX_FD_PASS) &&
++            virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS)) {
+             if (qemuSecuritySetSocketLabel(secManager, (virDomainDefPtr)def) < 0)
+                 goto cleanup;
+             int fd = qemuOpenChrChardevUNIXSocket(dev);
+@@ -5437,7 +5439,8 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
+                             qemuDomainObjPrivatePtr priv)
+ {
+     char *chrdev;
+-    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
++        QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
+     if (priv->chardevStdioLogd)
+         cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+@@ -5572,7 +5575,8 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager,
+                              char **chr,
+                              bool chardevStdioLogd)
+ {
+-    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
++        QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
+     if (chardevStdioLogd)
+         cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+     *chr = NULL;
+@@ -8740,7 +8744,8 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager,
+     virBuffer opt = VIR_BUFFER_INITIALIZER;
+     const char *database;
+     const char *contAlias = NULL;
+-    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
++        QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
+     if (chardevStdioLogd)
+         cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+@@ -8976,7 +8981,8 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
+     virBuffer buf = VIR_BUFFER_INITIALIZER;
+     char *devstr = NULL;
+     int rc;
+-    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
++        QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
+     if (chardevStdioLogd)
+         cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+@@ -9136,7 +9142,8 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager,
+ {
+     size_t i;
+     bool havespice = false;
+-    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
++        QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
+     if (chardevStdioLogd)
+         cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+@@ -9199,7 +9206,8 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager,
+                               bool chardevStdioLogd)
+ {
+     size_t i;
+-    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
++        QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
+     if (chardevStdioLogd)
+         cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+@@ -9236,7 +9244,8 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
+                              bool chardevStdioLogd)
+ {
+     size_t i;
+-    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
++        QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
+     if (chardevStdioLogd)
+         cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+@@ -9293,7 +9302,8 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
+                             bool chardevStdioLogd)
+ {
+     size_t i;
+-    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
++        QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
+     if (chardevStdioLogd)
+         cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+@@ -9473,7 +9483,8 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager,
+                              bool chardevStdioLogd)
+ {
+     size_t i;
+-    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
++    unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
++        QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
+     if (chardevStdioLogd)
+         cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
+ 
+diff --git a/tests/qemuxml2argvdata/net-vhostuser.args b/tests/qemuxml2argvdata/net-vhostuser.args
+index fc4557a1f2..513fc535ab 100644
+--- a/tests/qemuxml2argvdata/net-vhostuser.args
++++ b/tests/qemuxml2argvdata/net-vhostuser.args
+@@ -14,8 +14,7 @@ QEMU_AUDIO_DRV=none \
+ -display none \
+ -no-user-config \
+ -nodefaults \
+--chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
+-server,nowait \
++-chardev socket,id=charmonitor,fd=1729,server,nowait \
+ -mon chardev=charmonitor,id=monitor,mode=control \
+ -rtc base=utc \
+ -no-shutdown \
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index d6911f9344..2d52f352b0 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -1266,7 +1266,7 @@ mymain(void)
+     DO_TEST("misc-no-reboot", NONE);
+     DO_TEST("misc-uuid", NONE);
+     DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
+-    DO_TEST("net-vhostuser", NONE);
++    DO_TEST("net-vhostuser", QEMU_CAPS_CHARDEV_FD_PASS);
+     DO_TEST("net-vhostuser-multiq",
+             QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
+     DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-don-t-use-chardev-FD-passing-with-standalone-args.patch b/SOURCES/libvirt-qemu-don-t-use-chardev-FD-passing-with-standalone-args.patch
new file mode 100644
index 0000000..4a1718b
--- /dev/null
+++ b/SOURCES/libvirt-qemu-don-t-use-chardev-FD-passing-with-standalone-args.patch
@@ -0,0 +1,63 @@
+From bce02fd2af85630615cc0c46d64db7b7e1023171 Mon Sep 17 00:00:00 2001
+Message-Id: <bce02fd2af85630615cc0c46d64db7b7e1023171@dist-git>
+From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
+Date: Fri, 6 Jul 2018 15:46:58 +0100
+Subject: [PATCH] qemu: don't use chardev FD passing with standalone args
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1598281
+
+When using domxml-to-native, we must generate CLI args that can be used
+in a standalone scenario. This means no FD passing can be used. To
+achieve this we must clear the QEMU_CAPS_CHARDEV_FD_PASS capability bit.
+
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 7ac08cc929dc512e8682fbfcc5d33518058f20e4)
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_process.c | 5 +++++
+ src/qemu/qemu_process.h | 2 ++
+ 2 files changed, 7 insertions(+)
+
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index ac32dafcbe..40d35cbe6b 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -5124,6 +5124,9 @@ qemuProcessInit(virQEMUDriverPtr driver,
+                                                       vm->def->os.machine)))
+         goto cleanup;
+ 
++    if (flags & VIR_QEMU_PROCESS_START_STANDALONE)
++        virQEMUCapsClear(priv->qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS);
++
+     if (qemuDomainUpdateCPU(vm, updatedCPU, &origCPU) < 0)
+         goto cleanup;
+ 
+@@ -6632,6 +6635,8 @@ qemuProcessCreatePretendCmd(virQEMUDriverPtr driver,
+ 
+     flags |= VIR_QEMU_PROCESS_START_PRETEND;
+     flags |= VIR_QEMU_PROCESS_START_NEW;
++    if (standalone)
++        flags |= VIR_QEMU_PROCESS_START_STANDALONE;
+ 
+     if (qemuProcessInit(driver, vm, NULL, QEMU_ASYNC_JOB_NONE,
+                         !!migrateURI, flags) < 0)
+diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h
+index 531c2a0cc7..07ce3a9915 100644
+--- a/src/qemu/qemu_process.h
++++ b/src/qemu/qemu_process.h
+@@ -81,6 +81,8 @@ typedef enum {
+     VIR_QEMU_PROCESS_START_PRETEND      = 1 << 3,
+     VIR_QEMU_PROCESS_START_NEW          = 1 << 4, /* internal, new VM is starting */
+     VIR_QEMU_PROCESS_START_GEN_VMID     = 1 << 5, /* Generate a new VMID */
++    VIR_QEMU_PROCESS_START_STANDALONE   = 1 << 6, /* Require CLI args to be usable standalone,
++                                                     ie no FD passing and the like */
+ } qemuProcessStartFlags;
+ 
+ int qemuProcessStart(virConnectPtr conn,
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-fix-UNIX-socket-chardevs-operating-in-client-mode.patch b/SOURCES/libvirt-qemu-fix-UNIX-socket-chardevs-operating-in-client-mode.patch
new file mode 100644
index 0000000..13a8f58
--- /dev/null
+++ b/SOURCES/libvirt-qemu-fix-UNIX-socket-chardevs-operating-in-client-mode.patch
@@ -0,0 +1,132 @@
+From e093a96f00590a93221fac3db6397ec1d2982fdb Mon Sep 17 00:00:00 2001
+Message-Id: <e093a96f00590a93221fac3db6397ec1d2982fdb@dist-git>
+From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
+Date: Fri, 6 Jul 2018 15:47:02 +0100
+Subject: [PATCH] qemu: fix UNIX socket chardevs operating in client mode
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1598440
+
+When support was adding for passing a pre-opened listener socket to UNIX
+chardevs, it accidentally passed the listener socket for client mode
+chardevs too with predictable amounts of fail resulting. This affects
+libvirt when using QEMU >= 2.12
+
+Expand the unit test coverage to validate that we are only doing FD
+passing when operating in server mode.
+
+  https://bugzilla.redhat.com/show_bug.cgi?id=1598440
+
+Tested-by: Richard W.M. Jones <rjones@redhat.com>
+Reported-by: Richard W.M. Jones <rjones@redhat.com>
+Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 1bc1a7e3205f7ef75ebd8fd1ef7653f8e181e3d2)
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_command.c                       |  3 +-
+ .../qemuxml2argvdata/serial-unix-chardev.args |  2 ++
+ .../serial-unix-chardev.x86_64-latest.args    | 36 +++++++++++++++++++
+ .../qemuxml2argvdata/serial-unix-chardev.xml  |  4 +++
+ tests/qemuxml2argvtest.c                      |  1 +
+ 5 files changed, 45 insertions(+), 1 deletion(-)
+ create mode 100644 tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 637e787d25..f38ae668a7 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -5082,7 +5082,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
+         break;
+ 
+     case VIR_DOMAIN_CHR_TYPE_UNIX:
+-        if ((flags & QEMU_BUILD_CHARDEV_UNIX_FD_PASS) &&
++        if (dev->data.nix.listen &&
++            (flags & QEMU_BUILD_CHARDEV_UNIX_FD_PASS) &&
+             virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS)) {
+             if (qemuSecuritySetSocketLabel(secManager, (virDomainDefPtr)def) < 0)
+                 goto cleanup;
+diff --git a/tests/qemuxml2argvdata/serial-unix-chardev.args b/tests/qemuxml2argvdata/serial-unix-chardev.args
+index 584f4a1dd1..873d3263c6 100644
+--- a/tests/qemuxml2argvdata/serial-unix-chardev.args
++++ b/tests/qemuxml2argvdata/serial-unix-chardev.args
+@@ -26,4 +26,6 @@ server,nowait \
+ -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+ -chardev socket,id=charserial0,path=/tmp/serial.sock \
+ -device isa-serial,chardev=charserial0,id=serial0 \
++-chardev socket,id=charserial1,path=/tmp/serial-server.sock,server,nowait \
++-device isa-serial,chardev=charserial1,id=serial1 \
+ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
+diff --git a/tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args b/tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args
+new file mode 100644
+index 0000000000..ce7a7f80d7
+--- /dev/null
++++ b/tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args
+@@ -0,0 +1,36 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name guest=QEMUGuest1,debug-threads=on \
++-S \
++-object secret,id=masterKey0,format=raw,\
++file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-realtime mlock=off \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-display none \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,fd=1729,server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot strict=on \
++-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
++-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
++-chardev socket,id=charserial0,path=/tmp/serial.sock \
++-device isa-serial,chardev=charserial0,id=serial0 \
++-chardev socket,id=charserial1,fd=1729,server,nowait \
++-device isa-serial,chardev=charserial1,id=serial1 \
++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \
++-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
++resourcecontrol=deny \
++-msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/serial-unix-chardev.xml b/tests/qemuxml2argvdata/serial-unix-chardev.xml
+index 04f83779ce..af513d6445 100644
+--- a/tests/qemuxml2argvdata/serial-unix-chardev.xml
++++ b/tests/qemuxml2argvdata/serial-unix-chardev.xml
+@@ -25,6 +25,10 @@
+       <source mode='connect' path='/tmp/serial.sock'/>
+       <target port='0'/>
+     </serial>
++    <serial type='unix'>
++      <source mode='bind' path='/tmp/serial-server.sock'/>
++      <target port='1'/>
++    </serial>
+     <console type='unix'>
+       <source mode='connect' path='/tmp/serial.sock'/>
+       <target port='0'/>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 2d52f352b0..3be5af03aa 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -1335,6 +1335,7 @@ mymain(void)
+             QEMU_CAPS_CHARDEV_FILE_APPEND);
+     DO_TEST("serial-unix-chardev",
+             QEMU_CAPS_DEVICE_ISA_SERIAL);
++    DO_TEST_CAPS_LATEST("serial-unix-chardev");
+     DO_TEST("serial-tcp-chardev",
+             QEMU_CAPS_DEVICE_ISA_SERIAL);
+     DO_TEST("serial-udp-chardev",
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-fix-up-permissions-for-pre-created-UNIX-sockets.patch b/SOURCES/libvirt-qemu-fix-up-permissions-for-pre-created-UNIX-sockets.patch
new file mode 100644
index 0000000..d09fcf2
--- /dev/null
+++ b/SOURCES/libvirt-qemu-fix-up-permissions-for-pre-created-UNIX-sockets.patch
@@ -0,0 +1,50 @@
+From 863827760fc7550b9b454fadf1377bea616fdcfd Mon Sep 17 00:00:00 2001
+Message-Id: <863827760fc7550b9b454fadf1377bea616fdcfd@dist-git>
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
+Date: Wed, 3 Oct 2018 16:58:18 +0200
+Subject: [PATCH] qemu: fix up permissions for pre-created UNIX sockets
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+My commit d6b8838 fixed the uid:gid for the pre-created UNIX sockets
+but did not account for the different umask of libvirtd and QEMU.
+Since commit 0e1a1a8c we set umask to '0002' for the QEMU process.
+Manually tune-up the permissions to match what we would have gotten
+if QEMU had created the socket.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1633389
+
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 8ba65c4d95712b54362fd81c34bae99f51d45a0b)
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+
+RHEL 7.6.z: https://bugzilla.redhat.com/show_bug.cgi?id=1635228
+RHEL 8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1634775
+
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/qemu/qemu_command.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 5c71abab96..028f48310b 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -4933,6 +4933,12 @@ qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev)
+         goto error;
+     }
+ 
++    /* We run QEMU with umask 0002. Compensate for the umask
++     * libvirtd might be running under to get the same permission
++     * QEMU would have. */
++    if (virFileUpdatePerm(dev->data.nix.path, 0002, 0664) < 0)
++        goto error;
++
+     return fd;
+ 
+  error:
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-qemu-hotplug-Do-not-try-to-add-secret-object-for-TLS-if-it-does-not-exist.patch b/SOURCES/libvirt-qemu-hotplug-Do-not-try-to-add-secret-object-for-TLS-if-it-does-not-exist.patch
new file mode 100644
index 0000000..f75d26f
--- /dev/null
+++ b/SOURCES/libvirt-qemu-hotplug-Do-not-try-to-add-secret-object-for-TLS-if-it-does-not-exist.patch
@@ -0,0 +1,40 @@
+From 5ed0c705400de3ae142813ea6089313805bbfc54 Mon Sep 17 00:00:00 2001
+Message-Id: <5ed0c705400de3ae142813ea6089313805bbfc54@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Tue, 10 Jul 2018 17:41:10 +0200
+Subject: [PATCH] qemu: hotplug: Do not try to add secret object for TLS if it
+ does not exist
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The check whether the object holding secret for decryption of the TLS
+environment was wrong and would always attempt to add the object. This
+lead to a crash due to recent refactors.
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1598015
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 62ef8227e2717618c96fa17f2d4f5b7570bbe980)
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_hotplug.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
+index 075f2fb72e..456bfa4493 100644
+--- a/src/qemu/qemu_hotplug.c
++++ b/src/qemu/qemu_hotplug.c
+@@ -1338,7 +1338,7 @@ qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
+     if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
+         return -1;
+ 
+-    if (secProps &&
++    if (secProps && *secProps &&
+         qemuMonitorAddObject(priv->mon, secProps, &secAlias) < 0)
+         goto error;
+ 
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-hotplug-Don-t-access-srcPriv-when-it-s-not-allocated.patch b/SOURCES/libvirt-qemu-hotplug-Don-t-access-srcPriv-when-it-s-not-allocated.patch
new file mode 100644
index 0000000..b36f631
--- /dev/null
+++ b/SOURCES/libvirt-qemu-hotplug-Don-t-access-srcPriv-when-it-s-not-allocated.patch
@@ -0,0 +1,42 @@
+From a97299d1417a7982ebdb3182eded45066b9f5425 Mon Sep 17 00:00:00 2001
+Message-Id: <a97299d1417a7982ebdb3182eded45066b9f5425@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Tue, 3 Jul 2018 16:48:38 +0200
+Subject: [PATCH] qemu: hotplug: Don't access srcPriv when it's not allocated
+
+The private data of a virStorageSource which is backing an iSCSI hostdev
+may be NULL if no authentication is present. The code handling the
+hotplug would attempt to extract the authentication info stored in
+'secinfo' without checking if it is allocated which resulted in a crash.
+
+Here we opt the easy way to check if srcPriv is not NULL so that we
+don't duplicate all the logic which selects whether the disk source has
+a secret.
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1597550
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 33a475056fdd76c030528982e422bae79c0a0e4a)
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_hotplug.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
+index fcd8eb0ffa..075f2fb72e 100644
+--- a/src/qemu/qemu_hotplug.c
++++ b/src/qemu/qemu_hotplug.c
+@@ -2240,7 +2240,8 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
+     if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) {
+         qemuDomainStorageSourcePrivatePtr srcPriv =
+             QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(scsisrc->u.iscsi.src);
+-        secinfo = srcPriv->secinfo;
++        if (srcPriv)
++            secinfo = srcPriv->secinfo;
+     }
+ 
+     if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) {
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-hotplug-Fix-asynchronous-unplug-of-shmem.patch b/SOURCES/libvirt-qemu-hotplug-Fix-asynchronous-unplug-of-shmem.patch
new file mode 100644
index 0000000..e03f0ab
--- /dev/null
+++ b/SOURCES/libvirt-qemu-hotplug-Fix-asynchronous-unplug-of-shmem.patch
@@ -0,0 +1,47 @@
+From b6b3d9d21c2b4a3587c5d85b3fef6c6193730d69 Mon Sep 17 00:00:00 2001
+Message-Id: <b6b3d9d21c2b4a3587c5d85b3fef6c6193730d69@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Fri, 17 Aug 2018 12:05:13 +0200
+Subject: [PATCH] qemu: hotplug: Fix asynchronous unplug of 'shmem'
+
+commit 5c81c342a7 forgot to skip the detaching of the shmem backend
+when async unplug is requested which meant that we've tried to unplug
+the backend prior to delivery of the DEVICE_DELETED event.
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1618622
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+(cherry picked from commit 69c20e1090059d8b359fdd435e8ba50db7269be1)
+https: //bugzilla.redhat.com/show_bug.cgi?id=1618680
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/qemu/qemu_hotplug.c | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
+index 053ddb14ec..397a2bdde2 100644
+--- a/src/qemu/qemu_hotplug.c
++++ b/src/qemu/qemu_hotplug.c
+@@ -5262,11 +5262,16 @@ qemuDomainDetachShmemDevice(virQEMUDriverPtr driver,
+     if (qemuDomainObjExitMonitor(driver, vm) < 0)
+         goto cleanup;
+ 
+-    if ((ret = qemuDomainWaitForDeviceRemoval(vm)) == 1)
+-        ret = qemuDomainRemoveShmemDevice(driver, vm, shmem);
++    if (async) {
++        ret = 0;
++    } else {
++        if ((ret = qemuDomainWaitForDeviceRemoval(vm)) == 1)
++            ret = qemuDomainRemoveShmemDevice(driver, vm, shmem);
++    }
+ 
+  cleanup:
+-    qemuDomainResetDeviceRemoval(vm);
++    if (!async)
++        qemuDomainResetDeviceRemoval(vm);
+     return ret;
+ }
+ 
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-hotplug-don-t-overwrite-error-message-in-qemuDomainAttachNetDevice.patch b/SOURCES/libvirt-qemu-hotplug-don-t-overwrite-error-message-in-qemuDomainAttachNetDevice.patch
new file mode 100644
index 0000000..e54e407
--- /dev/null
+++ b/SOURCES/libvirt-qemu-hotplug-don-t-overwrite-error-message-in-qemuDomainAttachNetDevice.patch
@@ -0,0 +1,51 @@
+From 60696c94a10c41997fe44478a3551dce50d29233 Mon Sep 17 00:00:00 2001
+Message-Id: <60696c94a10c41997fe44478a3551dce50d29233@dist-git>
+From: Katerina Koukiou <kkoukiou@redhat.com>
+Date: Mon, 16 Jul 2018 11:20:56 +0200
+Subject: [PATCH] qemu: hotplug: don't overwrite error message in
+ qemuDomainAttachNetDevice
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since commit f14c37, virDomainConfVMNWFilterTeardown is reporting errors
+thus any previously reported error gets overwritten.
+We need to save the errors in qemuDomainAttachNetDevice before calling
+this function when we are in cleanup code.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1598311
+
+Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com>
+Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit f7b55665cc6b805bc4c34e1ec5908df31084ef5c)
+Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_hotplug.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
+index 456bfa4493..3d0f1055d9 100644
+--- a/src/qemu/qemu_hotplug.c
++++ b/src/qemu/qemu_hotplug.c
+@@ -790,6 +790,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
+     bool charDevPlugged = false;
+     bool netdevPlugged = false;
+     char *netdev_name;
++    virErrorPtr save_error = NULL;
+ 
+     /* preallocate new slot for device */
+     if (VIR_REALLOC_N(vm->def->nets, vm->def->nnets + 1) < 0)
+@@ -1071,7 +1072,9 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
+             qemuDomainReleaseDeviceAddress(vm, &net->info, NULL);
+ 
+         if (iface_connected) {
++            virErrorPreserveLast(&save_error);
+             virDomainConfNWFilterTeardown(net);
++            virErrorRestore(&save_error);
+ 
+             if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
+                 ignore_value(virNetDevMacVLanDeleteWithVPortProfile(
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-hotplug-report-error-when-changing-rom-enabled-attr-for-net-iface.patch b/SOURCES/libvirt-qemu-hotplug-report-error-when-changing-rom-enabled-attr-for-net-iface.patch
new file mode 100644
index 0000000..a3b6807
--- /dev/null
+++ b/SOURCES/libvirt-qemu-hotplug-report-error-when-changing-rom-enabled-attr-for-net-iface.patch
@@ -0,0 +1,40 @@
+From ddc505c4dd054d6d92099d467ba255eabcb84922 Mon Sep 17 00:00:00 2001
+Message-Id: <ddc505c4dd054d6d92099d467ba255eabcb84922@dist-git>
+From: Katerina Koukiou <kkoukiou@redhat.com>
+Date: Mon, 16 Jul 2018 11:42:28 +0200
+Subject: [PATCH] qemu: hotplug: report error when changing rom enabled attr
+ for net iface
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1599513
+
+Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 611b038fb60e23eb574148192090f33bc7264be2)
+Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_hotplug.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
+index 3d0f1055d9..91a751a2fe 100644
+--- a/src/qemu/qemu_hotplug.c
++++ b/src/qemu/qemu_hotplug.c
+@@ -3222,6 +3222,11 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
+                        _("cannot modify network device boot index setting"));
+         goto cleanup;
+     }
++    if (olddev->info.romenabled != newdev->info.romenabled) {
++        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
++                       _("cannot modify network device rom enabled setting"));
++        goto cleanup;
++    }
+     /* (end of device info checks) */
+ 
+     if (STRNEQ_NULLABLE(olddev->filter, newdev->filter) ||
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-mdev-Use-vfio-pci-display-property-only-with-vfio-pci-mdevs.patch b/SOURCES/libvirt-qemu-mdev-Use-vfio-pci-display-property-only-with-vfio-pci-mdevs.patch
new file mode 100644
index 0000000..558d6bf
--- /dev/null
+++ b/SOURCES/libvirt-qemu-mdev-Use-vfio-pci-display-property-only-with-vfio-pci-mdevs.patch
@@ -0,0 +1,43 @@
+From f5ff3821c1171718af9164be9002d3acfeb12cf2 Mon Sep 17 00:00:00 2001
+Message-Id: <f5ff3821c1171718af9164be9002d3acfeb12cf2@dist-git>
+From: Farhan Ali <alifm@linux.ibm.com>
+Date: Mon, 3 Sep 2018 09:58:50 +0200
+Subject: [PATCH] qemu: mdev: Use vfio-pci 'display' property only with
+ vfio-pci mdevs
+
+S390 is aware of both vfio-pci and vfio-ccw devices, so
+on S390 the capability QEMU_CAPS_VFIO_PCI_DISPLAY will be
+available. Add an extra check to make sure we only set the
+display to off for vfio-pci mediated devices. Otherwise we
+add display for vfio-ccw device and this breaks vfio-ccw
+device qemu command line.
+
+Fixes: d54e45b6e conf: Introduce new <hostdev> attribute 'display'
+Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
+Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit d6f97d1338ba9470f7c745fab317d272cde84d38)
+
+RHEL-7.6: https://bugzilla.redhat.com/show_bug.cgi?id=1624735
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1624740
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_domain.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 508846116b..17be6e5537 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -6272,6 +6272,7 @@ qemuDomainHostdevDefMdevPostParse(virDomainHostdevSubsysMediatedDevPtr mdevsrc,
+     /* QEMU 2.12 added support for vfio-pci display type, we default to
+      * 'display=off' to stay safe from future changes */
+     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VFIO_PCI_DISPLAY) &&
++        mdevsrc->model == VIR_MDEV_MODEL_TYPE_VFIO_PCI &&
+         mdevsrc->display == VIR_TRISTATE_SWITCH_ABSENT)
+         mdevsrc->display = VIR_TRISTATE_SWITCH_OFF;
+ 
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-monitor-Make-qemuMonitorAddObject-more-robust-against-programming-errors.patch b/SOURCES/libvirt-qemu-monitor-Make-qemuMonitorAddObject-more-robust-against-programming-errors.patch
new file mode 100644
index 0000000..f3f1ca0
--- /dev/null
+++ b/SOURCES/libvirt-qemu-monitor-Make-qemuMonitorAddObject-more-robust-against-programming-errors.patch
@@ -0,0 +1,91 @@
+From 08a2ab563571018ea8c4eb0ac34acc9f4913c714 Mon Sep 17 00:00:00 2001
+Message-Id: <08a2ab563571018ea8c4eb0ac34acc9f4913c714@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Tue, 10 Jul 2018 17:41:11 +0200
+Subject: [PATCH] qemu: monitor: Make qemuMonitorAddObject more robust against
+ programming errors
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Document and check that @props contains a pointer to a json object and
+check that both necessary fields are present. Also mark @props as
+NONNULL.
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit fac0dacd54c02b842c995d0999d9450d09d1e7cd)
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1598015
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_monitor.c | 23 +++++++++++++++++------
+ src/qemu/qemu_monitor.h |  3 ++-
+ 2 files changed, 19 insertions(+), 7 deletions(-)
+
+diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
+index 6ed475ede0..ae5b23b9fc 100644
+--- a/src/qemu/qemu_monitor.c
++++ b/src/qemu/qemu_monitor.c
+@@ -3073,8 +3073,9 @@ qemuMonitorCreateObjectProps(virJSONValuePtr *propsret,
+ /**
+  * qemuMonitorAddObject:
+  * @mon: Pointer to monitor object
+- * @props: Optional arguments for the given type. The object is consumed and
+- *         the pointer is cleared.
++ * @props: Pointer to a JSON object holding configuration of the object to add.
++ *         The object must be non-null and contain at least the "qom-type" and
++ *         "id" field. The object is consumed and the pointer is cleared.
+  * @alias: If not NULL, returns the alias of the added object if it was added
+  *         successfully to qemu. Caller should free the returned pointer.
+  *
+@@ -3085,18 +3086,28 @@ qemuMonitorAddObject(qemuMonitorPtr mon,
+                      virJSONValuePtr *props,
+                      char **alias)
+ {
+-    const char *type = virJSONValueObjectGetString(*props, "qom-type");
+-    const char *id = virJSONValueObjectGetString(*props, "id");
++    const char *type = NULL;
++    const char *id = NULL;
+     char *tmp = NULL;
+     int ret = -1;
+ 
++    if (!*props) {
++        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
++                       _("object props can't be NULL"));
++        goto cleanup;
++    }
++
++    type = virJSONValueObjectGetString(*props, "qom-type");
++    id = virJSONValueObjectGetString(*props, "id");
++
+     VIR_DEBUG("type=%s id=%s", NULLSTR(type), NULLSTR(id));
+ 
+     QEMU_CHECK_MONITOR_GOTO(mon, cleanup);
+ 
+-    if (!id) {
++    if (!id || !type) {
+         virReportError(VIR_ERR_INTERNAL_ERROR,
+-                       _("missing alias for qemu object '%s'"), NULLSTR(type));
++                       _("missing alias or qom-type for qemu object '%s'"),
++                       NULLSTR(type));
+         goto cleanup;
+     }
+ 
+diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
+index b3d62324b4..e8adda8aa0 100644
+--- a/src/qemu/qemu_monitor.h
++++ b/src/qemu/qemu_monitor.h
+@@ -812,7 +812,8 @@ int qemuMonitorCreateObjectProps(virJSONValuePtr *propsret,
+ 
+ int qemuMonitorAddObject(qemuMonitorPtr mon,
+                          virJSONValuePtr *props,
+-                         char **alias);
++                         char **alias)
++    ATTRIBUTE_NONNULL(1);
+ 
+ int qemuMonitorDelObject(qemuMonitorPtr mon,
+                          const char *objalias);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-monitor-Remove-qemuMonitorJSONExtractCPUArchInfo-wrapper.patch b/SOURCES/libvirt-qemu-monitor-Remove-qemuMonitorJSONExtractCPUArchInfo-wrapper.patch
new file mode 100644
index 0000000..bc9726d
--- /dev/null
+++ b/SOURCES/libvirt-qemu-monitor-Remove-qemuMonitorJSONExtractCPUArchInfo-wrapper.patch
@@ -0,0 +1,88 @@
+From a66c293aea0e989807b2a7850e597bf9514856d8 Mon Sep 17 00:00:00 2001
+Message-Id: <a66c293aea0e989807b2a7850e597bf9514856d8@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Tue, 4 Sep 2018 16:41:30 +0200
+Subject: [PATCH] qemu: monitor: Remove qemuMonitorJSONExtractCPUArchInfo
+ wrapper
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The wraper is quite pointless and also the 'arch' field may depend on
+whether query-cpus-fast is used.
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 1e65d35b047959af7a033aad4cc364e4cf87b17b)
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1598829
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_monitor_json.c | 27 +++++----------------------
+ 1 file changed, 5 insertions(+), 22 deletions(-)
+
+diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
+index 8199556166..e7e6658075 100644
+--- a/src/qemu/qemu_monitor_json.c
++++ b/src/qemu/qemu_monitor_json.c
+@@ -1603,27 +1603,6 @@ qemuMonitorJSONExtractCPUS390Info(virJSONValuePtr jsoncpu,
+ }
+ 
+ 
+-/**
+- * qemuMonitorJSONExtractCPUArchInfo:
+- * @jsoncpu: pointer to a single JSON cpu entry
+- * @cpu: pointer to a single cpu entry
+- *
+- * Extracts architecure specific virtual CPU data for a single
+- * CPU from the QAPI response using an architecture specific
+- * function.
+- *
+- */
+-static void
+-qemuMonitorJSONExtractCPUArchInfo(virJSONValuePtr jsoncpu,
+-                                  struct qemuMonitorQueryCpusEntry *cpu)
+-{
+-    const char *arch = virJSONValueObjectGetString(jsoncpu, "arch");
+-
+-    if (STREQ_NULLABLE(arch, "s390"))
+-        qemuMonitorJSONExtractCPUS390Info(jsoncpu, cpu);
+-}
+-
+-
+ /**
+  * qemuMonitorJSONExtractCPUInfo:
+  * @data: JSON response data
+@@ -1675,6 +1654,7 @@ qemuMonitorJSONExtractCPUInfo(virJSONValuePtr data,
+                               size_t *nentries,
+                               bool fast)
+ {
++    const char *arch = NULL;
+     struct qemuMonitorQueryCpusEntry *cpus = NULL;
+     int ret = -1;
+     size_t i;
+@@ -1702,10 +1682,12 @@ qemuMonitorJSONExtractCPUInfo(virJSONValuePtr data,
+          * The return data of query-cpus-fast has different field names
+          */
+         if (fast) {
++            arch = virJSONValueObjectGetString(entry, "arch");
+             ignore_value(virJSONValueObjectGetNumberInt(entry, "cpu-index", &cpuid));
+             ignore_value(virJSONValueObjectGetNumberInt(entry, "thread-id", &thread));
+             qom_path = virJSONValueObjectGetString(entry, "qom-path");
+         } else {
++            arch = virJSONValueObjectGetString(entry, "arch");
+             ignore_value(virJSONValueObjectGetNumberInt(entry, "CPU", &cpuid));
+             ignore_value(virJSONValueObjectGetNumberInt(entry, "thread_id", &thread));
+             ignore_value(virJSONValueObjectGetBoolean(entry, "halted", &halted));
+@@ -1719,7 +1701,8 @@ qemuMonitorJSONExtractCPUInfo(virJSONValuePtr data,
+             goto cleanup;
+ 
+         /* process optional architecture-specific data */
+-        qemuMonitorJSONExtractCPUArchInfo(entry, cpus + i);
++        if (STREQ_NULLABLE(arch, "s390"))
++            qemuMonitorJSONExtractCPUS390Info(entry, cpus + i);
+     }
+ 
+     VIR_STEAL_PTR(*entries, cpus);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-monitor-Use-target-instead-of-arch-in-reply-of-query-cpus-fast.patch b/SOURCES/libvirt-qemu-monitor-Use-target-instead-of-arch-in-reply-of-query-cpus-fast.patch
new file mode 100644
index 0000000..a79f941
--- /dev/null
+++ b/SOURCES/libvirt-qemu-monitor-Use-target-instead-of-arch-in-reply-of-query-cpus-fast.patch
@@ -0,0 +1,52 @@
+From d801cf83a1f453f034147e83bce0c9665d911c26 Mon Sep 17 00:00:00 2001
+Message-Id: <d801cf83a1f453f034147e83bce0c9665d911c26@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Tue, 4 Sep 2018 16:41:31 +0200
+Subject: [PATCH] qemu: monitor: Use 'target' instead of 'arch' in reply of
+ 'query-cpus-fast'
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+qemu changed the output field name for the architecture from 'arch' to
+'target'. Note the change and fix the code so that the arch-specific
+extraction works.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1598829
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 902f4bce098d68c48899fc1c42ec1552f2104995)
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1598829
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_monitor_json.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
+index e7e6658075..d6c11666c5 100644
+--- a/src/qemu/qemu_monitor_json.c
++++ b/src/qemu/qemu_monitor_json.c
+@@ -1647,6 +1647,9 @@ qemuMonitorJSONExtractCPUS390Info(virJSONValuePtr jsoncpu,
+  *    ...},
+  *    {...}
+  *  ]
++ *
++ *  Note that since QEMU 2.13.0 the "arch" output member of the
++ *  "query-cpus-fast" command is replaced by "target".
+  */
+ static int
+ qemuMonitorJSONExtractCPUInfo(virJSONValuePtr data,
+@@ -1682,7 +1685,8 @@ qemuMonitorJSONExtractCPUInfo(virJSONValuePtr data,
+          * The return data of query-cpus-fast has different field names
+          */
+         if (fast) {
+-            arch = virJSONValueObjectGetString(entry, "arch");
++            if (!(arch = virJSONValueObjectGetString(entry, "target")))
++                arch = virJSONValueObjectGetString(entry, "arch");
+             ignore_value(virJSONValueObjectGetNumberInt(entry, "cpu-index", &cpuid));
+             ignore_value(virJSONValueObjectGetNumberInt(entry, "thread-id", &thread));
+             qom_path = virJSONValueObjectGetString(entry, "qom-path");
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-qemuBuildHostdevCommandLine-Use-a-helper-variable-mdevsrc.patch b/SOURCES/libvirt-qemu-qemuBuildHostdevCommandLine-Use-a-helper-variable-mdevsrc.patch
new file mode 100644
index 0000000..bfe6aef
--- /dev/null
+++ b/SOURCES/libvirt-qemu-qemuBuildHostdevCommandLine-Use-a-helper-variable-mdevsrc.patch
@@ -0,0 +1,49 @@
+From d34cb86a2b1710c3800dbe84dd7d7e6b12fb691c Mon Sep 17 00:00:00 2001
+Message-Id: <d34cb86a2b1710c3800dbe84dd7d7e6b12fb691c@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:56 +0200
+Subject: [PATCH] qemu: qemuBuildHostdevCommandLine: Use a helper variable
+ mdevsrc
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Decrease the number of accessors we have to use.
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 3b61f333acd9266ff4f09e37515130d67d496f74)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_command.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 8a8cbfd7f6..fed4f8faf9 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -5394,7 +5394,9 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd,
+ 
+         /* MDEV */
+         if (virHostdevIsMdevDevice(hostdev)) {
+-            switch ((virMediatedDeviceModelType) subsys->u.mdev.model) {
++            virDomainHostdevSubsysMediatedDevPtr mdevsrc = &subsys->u.mdev;
++
++            switch ((virMediatedDeviceModelType) mdevsrc->model) {
+             case VIR_MDEV_MODEL_TYPE_VFIO_PCI:
+                 if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VFIO_PCI)) {
+                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+@@ -5402,6 +5404,7 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd,
+                                      "supported by this version of QEMU"));
+                     return -1;
+                 }
++
+                 break;
+             case VIR_MDEV_MODEL_TYPE_VFIO_CCW:
+                 if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VFIO_CCW)) {
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-remove-chardevStdioLogd-param-from-vhostuser-code-path.patch b/SOURCES/libvirt-qemu-remove-chardevStdioLogd-param-from-vhostuser-code-path.patch
new file mode 100644
index 0000000..4cd0773
--- /dev/null
+++ b/SOURCES/libvirt-qemu-remove-chardevStdioLogd-param-from-vhostuser-code-path.patch
@@ -0,0 +1,98 @@
+From b99c528bade746897154a3e63c7a53e33becc937 Mon Sep 17 00:00:00 2001
+Message-Id: <b99c528bade746897154a3e63c7a53e33becc937@dist-git>
+From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
+Date: Fri, 6 Jul 2018 15:46:59 +0100
+Subject: [PATCH] qemu: remove chardevStdioLogd param from vhostuser code path
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1597940
+
+The vhostuser network backend is only supported with the UNIX domain
+socket chardev backend, so passing around chardevStdioLogd is not
+required.
+
+Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 4c76266baca407ae4981a180aed45193e50a8ade)
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_command.c | 20 +++++++-------------
+ 1 file changed, 7 insertions(+), 13 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 4120e4f983..41050bfea3 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -8223,8 +8223,7 @@ qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver,
+                               virDomainDefPtr def,
+                               virDomainNetDefPtr net,
+                               virQEMUCapsPtr qemuCaps,
+-                              unsigned int bootindex,
+-                              bool chardevStdioLogd)
++                              unsigned int bootindex)
+ {
+     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+     char *chardev = NULL;
+@@ -8245,7 +8244,7 @@ qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver,
+                                                cmd, cfg, def,
+                                                net->data.vhostuser,
+                                                net->info.alias, qemuCaps, false,
+-                                               chardevStdioLogd)))
++                                               false)))
+             goto cleanup;
+         break;
+ 
+@@ -8319,8 +8318,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver,
+                               virNetDevVPortProfileOp vmop,
+                               bool standalone,
+                               size_t *nnicindexes,
+-                              int **nicindexes,
+-                              bool chardevStdioLogd)
++                              int **nicindexes)
+ {
+     int ret = -1;
+     char *nic = NULL, *host = NULL;
+@@ -8443,8 +8441,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver,
+ 
+     case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
+         ret = qemuBuildVhostuserCommandLine(driver, logManager, secManager, cmd, def,
+-                                            net, qemuCaps, bootindex,
+-                                            chardevStdioLogd);
++                                            net, qemuCaps, bootindex);
+         goto cleanup;
+         break;
+ 
+@@ -8628,8 +8625,7 @@ qemuBuildNetCommandLine(virQEMUDriverPtr driver,
+                         bool standalone,
+                         size_t *nnicindexes,
+                         int **nicindexes,
+-                        unsigned int *bootHostdevNet,
+-                        bool chardevStdioLogd)
++                        unsigned int *bootHostdevNet)
+ {
+     size_t i;
+     int last_good_net = -1;
+@@ -8656,8 +8652,7 @@ qemuBuildNetCommandLine(virQEMUDriverPtr driver,
+             if (qemuBuildInterfaceCommandLine(driver, logManager, secManager, cmd, def, net,
+                                               qemuCaps, bootNet, vmop,
+                                               standalone, nnicindexes,
+-                                              nicindexes,
+-                                              chardevStdioLogd) < 0)
++                                              nicindexes) < 0)
+                 goto error;
+ 
+             last_good_net = i;
+@@ -10318,8 +10313,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
+ 
+     if (qemuBuildNetCommandLine(driver, logManager, secManager, cmd, def,
+                                 qemuCaps, vmop, standalone,
+-                                nnicindexes, nicindexes, &bootHostdevNet,
+-                                chardevStdioLogd) < 0)
++                                nnicindexes, nicindexes, &bootHostdevNet) < 0)
+         goto error;
+ 
+     if (qemuBuildSmartcardCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps,
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-require-reply-from-guest-agent-in-qemuAgentGetInterfaces.patch b/SOURCES/libvirt-qemu-require-reply-from-guest-agent-in-qemuAgentGetInterfaces.patch
new file mode 100644
index 0000000..1e4477a
--- /dev/null
+++ b/SOURCES/libvirt-qemu-require-reply-from-guest-agent-in-qemuAgentGetInterfaces.patch
@@ -0,0 +1,50 @@
+From e9a07e34c638a540e6ecc7fd05834c7682f22631 Mon Sep 17 00:00:00 2001
+Message-Id: <e9a07e34c638a540e6ecc7fd05834c7682f22631@dist-git>
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
+Date: Thu, 10 Jan 2019 12:49:11 +0100
+Subject: [PATCH] qemu: require reply from guest agent in
+ qemuAgentGetInterfaces
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since its introduction in commit 0977b8aa071 (released in v1.2.14)
+qemuAgentGetInterfaces calls qemuAgentCommand with needReply=false,
+which allows qemuAgentCommand to return 0 even when it did not get
+any reply from the agent.
+
+Set needReply to true, since we dereference it right after.
+
+This can be hit if libvirt is waiting for an event from the agent
+(e.g. shutdown) and the agent cannot reply in time (e.g. due to
+the guest being shut down), as reported in:
+https://bugzilla.redhat.com/show_bug.cgi?id=1663051
+
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 7cfd1fbb1332ae5df678b9f41a62156cb2e88c73)
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+
+8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1665000
+
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_agent.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
+index 986e37b07d..d6fd02a4b6 100644
+--- a/src/qemu/qemu_agent.c
++++ b/src/qemu/qemu_agent.c
+@@ -1987,7 +1987,7 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
+     if (!(cmd = qemuAgentMakeCommand("guest-network-get-interfaces", NULL)))
+         goto cleanup;
+ 
+-    if (qemuAgentCommand(mon, cmd, &reply, false,
++    if (qemuAgentCommand(mon, cmd, &reply, true,
+                          VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK) < 0)
+         goto cleanup;
+ 
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-qemu-validate-Enforce-compile-time-switch-type-checking-for-videos.patch b/SOURCES/libvirt-qemu-validate-Enforce-compile-time-switch-type-checking-for-videos.patch
new file mode 100644
index 0000000..e39d353
--- /dev/null
+++ b/SOURCES/libvirt-qemu-validate-Enforce-compile-time-switch-type-checking-for-videos.patch
@@ -0,0 +1,59 @@
+From 5c8a577f4abefca0b3d4ec2cb7eb5a7a73e9868e Mon Sep 17 00:00:00 2001
+Message-Id: <5c8a577f4abefca0b3d4ec2cb7eb5a7a73e9868e@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:53 +0200
+Subject: [PATCH] qemu: validate: Enforce compile time switch type checking for
+ videos
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+There wasn't an explicit type case to the video type enum in
+qemuDomainDeviceDefValidateVideo, _TYPE_GOP was also missing from the
+switch.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit 767f9e1449b1a36111532847f0c62dc758263c42)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.h | 2 +-
+ src/qemu/qemu_domain.c | 3 ++-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index 1fc1734bcc..0f10e242fd 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -1453,7 +1453,7 @@ struct _virDomainVideoDriverDef {
+ };
+ 
+ struct _virDomainVideoDef {
+-    int type;
++    int type;   /* enum virDomainVideoType */
+     unsigned int ram;  /* kibibytes (multiples of 1024) */
+     unsigned int vram; /* kibibytes (multiples of 1024) */
+     unsigned int vram64; /* kibibytes (multiples of 1024) */
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index dec057e021..a42a6df91b 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -4470,10 +4470,11 @@ qemuDomainDeviceDefValidateHostdev(const virDomainHostdevDef *hostdev,
+ static int
+ qemuDomainDeviceDefValidateVideo(const virDomainVideoDef *video)
+ {
+-    switch (video->type) {
++    switch ((virDomainVideoType) video->type) {
+     case VIR_DOMAIN_VIDEO_TYPE_XEN:
+     case VIR_DOMAIN_VIDEO_TYPE_VBOX:
+     case VIR_DOMAIN_VIDEO_TYPE_PARALLELS:
++    case VIR_DOMAIN_VIDEO_TYPE_GOP:
+     case VIR_DOMAIN_VIDEO_TYPE_DEFAULT:
+         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                        _("video type '%s' is not supported with QEMU"),
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu-vfio-ap-device-support.patch b/SOURCES/libvirt-qemu-vfio-ap-device-support.patch
new file mode 100644
index 0000000..9be0d24
--- /dev/null
+++ b/SOURCES/libvirt-qemu-vfio-ap-device-support.patch
@@ -0,0 +1,166 @@
+From 4b249d6de82cd42d29aeccccef4ae483c71b1528 Mon Sep 17 00:00:00 2001
+Message-Id: <4b249d6de82cd42d29aeccccef4ae483c71b1528@dist-git>
+From: Boris Fiuczynski <fiuczy@linux.ibm.com>
+Date: Fri, 30 Nov 2018 15:49:24 +0100
+Subject: [PATCH] qemu: vfio-ap device support
+
+Adjusting domain format documentation, adding device address
+support and adding command line generation for vfio-ap.
+Since only one mediated hostdev with model vfio-ap is supported a check
+disallows to define domains with more than one such hostdev device.
+
+Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
+Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
+Reviewed-by: Chris Venteicher <cventeic@redhat.com>
+(cherry picked from commit 11708641983e9107a129c62fd343d0fec228342f)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1508146
+
+Signed-off-by: Pino Toscano <ptoscano@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ docs/formatdomain.html.in      |  3 ++-
+ docs/schemas/domaincommon.rng  |  1 +
+ src/conf/domain_conf.c         | 28 ++++++++++++++++++++++++++++
+ src/qemu/qemu_command.c        |  8 ++++++++
+ src/qemu/qemu_domain_address.c |  4 ++++
+ src/util/virmdev.c             |  3 ++-
+ src/util/virmdev.h             |  1 +
+ 7 files changed, 46 insertions(+), 2 deletions(-)
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index c019b26644..54eb298414 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -4528,8 +4528,9 @@
+           <dd>For mediated devices (<span class="since">Since 3.2.0</span>)
+           the <code>model</code> attribute specifies the device API which
+           determines how the host's vfio driver will expose the device to the
+-          guest. Currently, <code>model='vfio-pci'</code> and
++          guest. Currently, <code>model='vfio-pci'</code>,
+           <code>model='vfio-ccw'</code> (<span class="since">Since 4.4.0</span>)
++          and <code>model='vfio-ap'</code> (<span class="since">Since 4.9.0</span>)
+           is supported. <a href="drvnodedev.html#MDEV">MDEV</a> section
+           provides more information about mediated devices as well as how to
+           create mediated devices on the host.
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index 1c6f2a295d..e4ce7804b9 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -4578,6 +4578,7 @@
+       <choice>
+         <value>vfio-pci</value>
+         <value>vfio-ccw</value>
++        <value>vfio-ap</value>
+       </choice>
+     </attribute>
+     <optional>
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index e013e9f0c5..ea7152eb94 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -4325,6 +4325,31 @@ virDomainDefPostParseGraphics(virDomainDef *def)
+ }
+ 
+ 
++static int
++virDomainDefPostParseHostdev(virDomainDefPtr def)
++{
++    size_t i;
++    bool vfioap_found = false;
++
++    /* verify settings of hostdevs vfio-ap */
++    for (i = 0; i < def->nhostdevs; i++) {
++        virDomainHostdevDefPtr hostdev = def->hostdevs[i];
++
++        if (virHostdevIsMdevDevice(hostdev) &&
++            hostdev->source.subsys.u.mdev.model == VIR_MDEV_MODEL_TYPE_VFIO_AP) {
++            if (vfioap_found) {
++                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                               _("Only one hostdev of model vfio-ap is "
++                                 "supported"));
++                return -1;
++            }
++            vfioap_found = true;
++        }
++    }
++    return 0;
++}
++
++
+ /**
+  * virDomainDriveAddressIsUsedByDisk:
+  * @def: domain definition containing the disks to check
+@@ -5237,6 +5262,9 @@ virDomainDefPostParseCommon(virDomainDefPtr def,
+ 
+     virDomainDefPostParseGraphics(def);
+ 
++    if (virDomainDefPostParseHostdev(def) < 0)
++        return -1;
++
+     if (virDomainDefPostParseCPU(def) < 0)
+         return -1;
+ 
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index a3d605c00f..320ecd902c 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -5430,6 +5430,14 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd,
+                     return -1;
+                 }
+                 break;
++            case VIR_MDEV_MODEL_TYPE_VFIO_AP:
++                if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VFIO_AP)) {
++                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                                   _("VFIO AP device assignment is not "
++                                     "supported by this version of QEMU"));
++                    return -1;
++                }
++                break;
+             case VIR_MDEV_MODEL_TYPE_LAST:
+                 virReportError(VIR_ERR_INTERNAL_ERROR,
+                                _("unexpected vfio type '%d'"), subsys->u.mdev.model);
+diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
+index 0cb5af4a87..3e50521c11 100644
+--- a/src/qemu/qemu_domain_address.c
++++ b/src/qemu/qemu_domain_address.c
+@@ -294,6 +294,10 @@ qemuDomainPrimeVfioDeviceAddresses(virDomainDefPtr def,
+             subsys->u.mdev.model == VIR_MDEV_MODEL_TYPE_VFIO_CCW &&
+             def->hostdevs[i]->info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
+             def->hostdevs[i]->info->type = type;
++
++        if (virHostdevIsMdevDevice(def->hostdevs[i]) &&
++            subsys->u.mdev.model == VIR_MDEV_MODEL_TYPE_VFIO_AP)
++            def->hostdevs[i]->info->type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE;
+     }
+ }
+ 
+diff --git a/src/util/virmdev.c b/src/util/virmdev.c
+index 6c513884b8..1b5897c654 100644
+--- a/src/util/virmdev.c
++++ b/src/util/virmdev.c
+@@ -49,7 +49,8 @@ struct _virMediatedDeviceList {
+ 
+ VIR_ENUM_IMPL(virMediatedDeviceModel, VIR_MDEV_MODEL_TYPE_LAST,
+               "vfio-pci",
+-              "vfio-ccw")
++              "vfio-ccw",
++              "vfio-ap")
+ 
+ static virClassPtr virMediatedDeviceListClass;
+ 
+diff --git a/src/util/virmdev.h b/src/util/virmdev.h
+index cfda2cacab..ba411a933a 100644
+--- a/src/util/virmdev.h
++++ b/src/util/virmdev.h
+@@ -26,6 +26,7 @@
+ typedef enum {
+     VIR_MDEV_MODEL_TYPE_VFIO_PCI = 0,
+     VIR_MDEV_MODEL_TYPE_VFIO_CCW = 1,
++    VIR_MDEV_MODEL_TYPE_VFIO_AP  = 2,
+ 
+     VIR_MDEV_MODEL_TYPE_LAST
+ } virMediatedDeviceModelType;
+-- 
+2.19.2
+
diff --git a/SOURCES/libvirt-qemu-vnc-switch-to-tls-creds-x509.patch b/SOURCES/libvirt-qemu-vnc-switch-to-tls-creds-x509.patch
new file mode 100644
index 0000000..52ee497
--- /dev/null
+++ b/SOURCES/libvirt-qemu-vnc-switch-to-tls-creds-x509.patch
@@ -0,0 +1,87 @@
+From 549657f96937eee9d31a44f9cb202bd61a4ce99d Mon Sep 17 00:00:00 2001
+Message-Id: <549657f96937eee9d31a44f9cb202bd61a4ce99d@dist-git>
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
+Date: Tue, 28 Aug 2018 12:46:45 +0200
+Subject: [PATCH] qemu: vnc: switch to tls-creds-x509
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The tls, x509 and x509verify options were deprecated in QEMU v2.5.0:
+
+commit 3e305e4a4752f70c0b5c3cf5b43ec957881714f7
+Author:     Daniel P. Berrange <berrange@redhat.com>
+
+    ui: convert VNC server to use QCryptoTLSSession
+
+Use the tls-creds-x509 object when available.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1598167
+
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 17f50c82600c11c0ebcb4fc944b3f38b8e06bcdb)
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1598167
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/qemu/qemu_command.c                       | 26 ++++++++++++++-----
+ .../graphics-vnc-tls.x86_64-latest.args       |  4 ++-
+ 2 files changed, 23 insertions(+), 7 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index f2b64ed720..5c71abab96 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -7892,13 +7892,27 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg,
+         virBufferAddLit(&opt, ",password");
+ 
+     if (cfg->vncTLS) {
+-        virBufferAddLit(&opt, ",tls");
+-        if (cfg->vncTLSx509verify) {
+-            virBufferAddLit(&opt, ",x509verify=");
+-            virQEMUBuildBufferEscapeComma(&opt, cfg->vncTLSx509certdir);
++        if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_TLS_CREDS_X509)) {
++            const char *alias = "vnc-tls-creds0";
++            if (qemuBuildTLSx509CommandLine(cmd,
++                                            cfg->vncTLSx509certdir,
++                                            true,
++                                            cfg->vncTLSx509verify,
++                                            NULL,
++                                            alias,
++                                            qemuCaps) < 0)
++                goto error;
++
++            virBufferAsprintf(&opt, ",tls-creds=%s", alias);
+         } else {
+-            virBufferAddLit(&opt, ",x509=");
+-            virQEMUBuildBufferEscapeComma(&opt, cfg->vncTLSx509certdir);
++            virBufferAddLit(&opt, ",tls");
++            if (cfg->vncTLSx509verify) {
++                virBufferAddLit(&opt, ",x509verify=");
++                virQEMUBuildBufferEscapeComma(&opt, cfg->vncTLSx509certdir);
++            } else {
++                virBufferAddLit(&opt, ",x509=");
++                virQEMUBuildBufferEscapeComma(&opt, cfg->vncTLSx509certdir);
++            }
+         }
+     }
+ 
+diff --git a/tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-latest.args b/tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-latest.args
+index 01743eff2a..97775fad42 100644
+--- a/tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-latest.args
+@@ -24,7 +24,9 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
+--vnc 127.0.0.1:3,tls,x509verify=/etc/pki/libvirt-vnc,sasl \
++-object tls-creds-x509,id=vnc-tls-creds0,dir=/etc/pki/libvirt-vnc,\
++endpoint=server,verify-peer=yes \
++-vnc 127.0.0.1:3,tls-creds=vnc-tls-creds0,sasl \
+ -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 \
+ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
+ resourcecontrol=deny \
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemuDomainDeviceDefValidateNetwork-Check-for-range-only-if-IP-prefix-set.patch b/SOURCES/libvirt-qemuDomainDeviceDefValidateNetwork-Check-for-range-only-if-IP-prefix-set.patch
new file mode 100644
index 0000000..85c00f7
--- /dev/null
+++ b/SOURCES/libvirt-qemuDomainDeviceDefValidateNetwork-Check-for-range-only-if-IP-prefix-set.patch
@@ -0,0 +1,41 @@
+From 46deb7c0c9e483ba57e9f9638e31482a9af026c9 Mon Sep 17 00:00:00 2001
+Message-Id: <46deb7c0c9e483ba57e9f9638e31482a9af026c9@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Mon, 9 Jul 2018 12:07:39 +0200
+Subject: [PATCH] qemuDomainDeviceDefValidateNetwork: Check for range only if
+ IP prefix set
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1515533
+
+The @prefix attribute to <ip/> element for interface type user is
+optional. Therefore, if left out it has value of zero in which
+case we should not check whether it falls into <4, 27> range.
+Otherwise we fail parsing domain XML for no good reason.
+
+Broken by commit b62b8090b2ad4524a5bf9d40d0d1c17a9d57f5a0.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit a6fbbce73e2965edde45ece7c034e4b39bb8405d)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_domain.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index fa952f8306..f9bcf76f44 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -4386,7 +4386,8 @@ qemuDomainDeviceDefValidateNetwork(const virDomainNetDef *net)
+                 }
+                 hasIPv4 = true;
+ 
+-                if (ip->prefix < 4 || ip->prefix > 27) {
++                if (ip->prefix > 0 &&
++                    (ip->prefix < 4 || ip->prefix > 27)) {
+                     virReportError(VIR_ERR_XML_ERROR, "%s",
+                                    _("invalid prefix, must be in range of 4-27"));
+                     return -1;
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemuDomainNestedJobAllowed-Allow-QEMU_JOB_NONE.patch b/SOURCES/libvirt-qemuDomainNestedJobAllowed-Allow-QEMU_JOB_NONE.patch
new file mode 100644
index 0000000..6ce3fe0
--- /dev/null
+++ b/SOURCES/libvirt-qemuDomainNestedJobAllowed-Allow-QEMU_JOB_NONE.patch
@@ -0,0 +1,47 @@
+From a6912230c999761dd5a5e23f1bdec8ae00255760 Mon Sep 17 00:00:00 2001
+Message-Id: <a6912230c999761dd5a5e23f1bdec8ae00255760@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 4 Jul 2018 14:51:17 +0200
+Subject: [PATCH] qemuDomainNestedJobAllowed: Allow QEMU_JOB_NONE
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1598084
+
+When creating a snapshot with --quiesce an async job is grabbed
+and just before executing guest fs-freeze command an agent job is
+grabbed. This is achieved by calling
+
+  qemuDomainObjBeginJobInternal(job = QEMU_JOB_NONE,
+                                agentJob = QEMU_AGENT_JOB_MODIFY);
+
+Since there already is an async job set on the domain (by the
+same thread) qemuDomainNestedJobAllowed(priv, job) is consulted
+if @job is allowed by job mask. But this function returns false
+(meaning sync @job is not allowed) which leads to a deadlock.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 2647a363676833371ba400374ecfa51c84fec5c0)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/qemu/qemu_domain.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index 3f3bb94685..fa952f8306 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -6386,7 +6386,9 @@ qemuDomainObjReleaseAsyncJob(virDomainObjPtr obj)
+ static bool
+ qemuDomainNestedJobAllowed(qemuDomainObjPrivatePtr priv, qemuDomainJob job)
+ {
+-    return !priv->job.asyncJob || (priv->job.mask & JOB_MASK(job)) != 0;
++    return !priv->job.asyncJob ||
++           job == QEMU_JOB_NONE ||
++           (priv->job.mask & JOB_MASK(job)) != 0;
+ }
+ 
+ bool
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemuDomainSaveMemory-Don-t-enforce-dynamicOwnership.patch b/SOURCES/libvirt-qemuDomainSaveMemory-Don-t-enforce-dynamicOwnership.patch
new file mode 100644
index 0000000..f1244da
--- /dev/null
+++ b/SOURCES/libvirt-qemuDomainSaveMemory-Don-t-enforce-dynamicOwnership.patch
@@ -0,0 +1,90 @@
+From 94ba115a0dc13cedaf652513ac6cacd419672627 Mon Sep 17 00:00:00 2001
+Message-Id: <94ba115a0dc13cedaf652513ac6cacd419672627@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 25 Jul 2018 08:27:10 +0200
+Subject: [PATCH] qemuDomainSaveMemory: Don't enforce dynamicOwnership
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1589115
+
+When doing a memory snapshot qemuOpenFile() is used. This means
+that the file where memory is saved is firstly attempted to be
+created under root:root (because that's what libvirtd is running
+under) and if this fails the second attempt is done under
+domain's uid:gid. This does not make much sense - qemu is given
+opened FD so it does not need to access the file. Moreover, if
+dynamicOwnership is set in qemu.conf and the file lives on a
+squashed NFS this is deadly combination and very likely to fail.
+
+The fix consists of using:
+
+  qemuOpenFileAs(fallback_uid = cfg->user,
+                 fallback_gid = cfg->group,
+                 dynamicOwnership = false)
+
+In other words, dynamicOwnership is turned off for memory
+snapshot (chown() will still be attempted if the file does not
+live on NFS) and instead of using domain DAC label, configured
+user:group is set as fallback.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 8c8c32339ae965fa6991462e98be1f5890ac7499)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_driver.c | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index e8a595f17e..f85248e3c7 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -3185,6 +3185,7 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver,
+                      unsigned int flags,
+                      qemuDomainAsyncJob asyncJob)
+ {
++    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+     bool needUnlink = false;
+     int ret = -1;
+     int fd = -1;
+@@ -3202,9 +3203,10 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver,
+             goto cleanup;
+         }
+     }
+-    fd = qemuOpenFile(driver, vm, path,
+-                      O_WRONLY | O_TRUNC | O_CREAT | directFlag,
+-                      &needUnlink);
++
++    fd = qemuOpenFileAs(cfg->user, cfg->group, false, path,
++                        O_WRONLY | O_TRUNC | O_CREAT | directFlag,
++                        &needUnlink);
+     if (fd < 0)
+         goto cleanup;
+ 
+@@ -3244,6 +3246,7 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver,
+  cleanup:
+     VIR_FORCE_CLOSE(fd);
+     virFileWrapperFdFree(wrapperFd);
++    virObjectUnref(cfg);
+ 
+     if (ret < 0 && needUnlink)
+         unlink(path);
+@@ -3793,9 +3796,9 @@ doCoreDump(virQEMUDriverPtr driver,
+     /* Core dumps usually imply last-ditch analysis efforts are
+      * desired, so we intentionally do not unlink even if a file was
+      * created.  */
+-    if ((fd = qemuOpenFile(driver, vm, path,
+-                           O_CREAT | O_TRUNC | O_WRONLY | directFlag,
+-                           NULL)) < 0)
++    if ((fd = qemuOpenFileAs(cfg->user, cfg->group, false, path,
++                             O_CREAT | O_TRUNC | O_WRONLY | directFlag,
++                             NULL)) < 0)
+         goto cleanup;
+ 
+     if (!(wrapperFd = virFileWrapperFdNew(&fd, path, flags)))
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemuDomainValidateStorageSource-Relax-PR-validation.patch b/SOURCES/libvirt-qemuDomainValidateStorageSource-Relax-PR-validation.patch
new file mode 100644
index 0000000..3d0e624
--- /dev/null
+++ b/SOURCES/libvirt-qemuDomainValidateStorageSource-Relax-PR-validation.patch
@@ -0,0 +1,64 @@
+From 448e9008661651e4a232e3919e13cc9114c4bdc9 Mon Sep 17 00:00:00 2001
+Message-Id: <448e9008661651e4a232e3919e13cc9114c4bdc9@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 11 Jul 2018 17:27:24 +0200
+Subject: [PATCH] qemuDomainValidateStorageSource: Relax PR validation
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1470007
+
+Rather than rejecting the user provided path and alias for the
+managed PR reservation we will ignore the provided path. The
+reason is that migration XML does contain path even for managed
+reservations.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 900403a3b2fe76ec3e03086c24a2d5480a7a6b06)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_domain.c | 19 ++++++-------------
+ 1 file changed, 6 insertions(+), 13 deletions(-)
+
+diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
+index f9bcf76f44..cfecbaca74 100644
+--- a/src/qemu/qemu_domain.c
++++ b/src/qemu/qemu_domain.c
+@@ -4615,19 +4615,11 @@ qemuDomainValidateStorageSource(virStorageSourcePtr src,
+         }
+     }
+ 
+-    if (src->pr) {
+-        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PR_MANAGER_HELPER)) {
+-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+-                           _("reservations not supported with this QEMU binary"));
+-            return -1;
+-        }
+-
+-        if (virStoragePRDefIsManaged(src->pr) && src->pr->path) {
+-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+-                           _("'path' attribute should not be provided for "
+-                             "managed reservations"));
+-            return -1;
+-        }
++    if (src->pr &&
++        !virQEMUCapsGet(qemuCaps, QEMU_CAPS_PR_MANAGER_HELPER)) {
++        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                       _("reservations not supported with this QEMU binary"));
++        return -1;
+     }
+ 
+     return 0;
+@@ -12831,6 +12823,7 @@ qemuDomainPrepareStorageSourcePR(virStorageSourcePtr src,
+         return 0;
+ 
+     if (virStoragePRDefIsManaged(src->pr)) {
++        VIR_FREE(src->pr->path);
+         if (!(src->pr->path = qemuDomainGetManagedPRSocketPath(priv)))
+             return -1;
+         if (VIR_STRDUP(src->pr->mgralias, qemuDomainGetManagedPRAlias()) < 0)
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemuProcessStartPRDaemonHook-Try-to-set-NS-iff-domain-was-started-with-one.patch b/SOURCES/libvirt-qemuProcessStartPRDaemonHook-Try-to-set-NS-iff-domain-was-started-with-one.patch
new file mode 100644
index 0000000..5ad49b9
--- /dev/null
+++ b/SOURCES/libvirt-qemuProcessStartPRDaemonHook-Try-to-set-NS-iff-domain-was-started-with-one.patch
@@ -0,0 +1,52 @@
+From d003bd56fc1e7fc166e7a350e471644431a48988 Mon Sep 17 00:00:00 2001
+Message-Id: <d003bd56fc1e7fc166e7a350e471644431a48988@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 11 Jul 2018 17:27:23 +0200
+Subject: [PATCH] qemuProcessStartPRDaemonHook: Try to set NS iff domain was
+ started with one
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1470007
+
+Users have possibility to disable qemu namespace feature (e.g.
+because they are running on *BSD which lacks Linux NS support).
+If that's the case we should not try to move qemu-pr-helper into
+the same namespace as qemu is in.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit dd1d58cabc850324bb9a7ed836985d34697aa7b2)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_process.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index 40d35cbe6b..f200729cb1 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -2522,12 +2522,14 @@ qemuProcessStartPRDaemonHook(void *opaque)
+     int *fds = NULL;
+     int ret = -1;
+ 
+-    if (virProcessGetNamespaces(vm->pid, &nfds, &fds) < 0)
+-        return ret;
++    if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT)) {
++        if (virProcessGetNamespaces(vm->pid, &nfds, &fds) < 0)
++            return ret;
+ 
+-    if (nfds > 0 &&
+-        virProcessSetNamespaces(nfds, fds) < 0)
+-        goto cleanup;
++        if (nfds > 0 &&
++            virProcessSetNamespaces(nfds, fds) < 0)
++            goto cleanup;
++    }
+ 
+     ret = 0;
+  cleanup:
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu_migration-Avoid-writing-to-freed-memory.patch b/SOURCES/libvirt-qemu_migration-Avoid-writing-to-freed-memory.patch
new file mode 100644
index 0000000..1dac6b3
--- /dev/null
+++ b/SOURCES/libvirt-qemu_migration-Avoid-writing-to-freed-memory.patch
@@ -0,0 +1,48 @@
+From 14898a26978613278b0a2508c077179144d54b39 Mon Sep 17 00:00:00 2001
+Message-Id: <14898a26978613278b0a2508c077179144d54b39@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Thu, 2 Aug 2018 16:56:02 +0200
+Subject: [PATCH] qemu_migration: Avoid writing to freed memory
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When a domain is killed on the source host while it is being migrated
+and libvirtd is waiting for the migration to finish (waiting for the
+domain condition in qemuMigrationSrcWaitForCompletion), the run-time
+state including priv->job.current may already be freed once
+virDomainObjWait returns with -1. Thus the priv->job.current pointer
+cached in jobInfo is no longer valid and setting jobInfo->status may
+crash the daemon.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1593137
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit dddcb601ebf97ef222a03bb27b2357e831e8a0cc)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1615854
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/qemu/qemu_migration.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
+index 435cd174af..825a9d399b 100644
+--- a/src/qemu/qemu_migration.c
++++ b/src/qemu/qemu_migration.c
+@@ -1584,7 +1584,8 @@ qemuMigrationSrcWaitForCompletion(virQEMUDriverPtr driver,
+ 
+         if (events) {
+             if (virDomainObjWait(vm) < 0) {
+-                jobInfo->status = QEMU_DOMAIN_JOB_STATUS_FAILED;
++                if (virDomainObjIsActive(vm))
++                    jobInfo->status = QEMU_DOMAIN_JOB_STATUS_FAILED;
+                 return -2;
+             }
+         } else {
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-qemu_monitor-Introduce-qemuMonitorJSONGetPRManagerInfo.patch b/SOURCES/libvirt-qemu_monitor-Introduce-qemuMonitorJSONGetPRManagerInfo.patch
new file mode 100644
index 0000000..fbea3ca
--- /dev/null
+++ b/SOURCES/libvirt-qemu_monitor-Introduce-qemuMonitorJSONGetPRManagerInfo.patch
@@ -0,0 +1,180 @@
+From 968116c9fb74569a6ea61e7eef6a87b6e766a61b Mon Sep 17 00:00:00 2001
+Message-Id: <968116c9fb74569a6ea61e7eef6a87b6e766a61b@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 11 Jul 2018 17:27:27 +0200
+Subject: [PATCH] qemu_monitor: Introduce qemuMonitorJSONGetPRManagerInfo
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1470007
+
+This function fetches status of all pr-managers. So far, qemu
+reports only a single attribute "connected" but that fits our
+needs.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 5f085862e87668e77333cc369bf66ff3b6c19ae8)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_monitor.c      | 25 ++++++++++++
+ src/qemu/qemu_monitor.h      |  9 ++++
+ src/qemu/qemu_monitor_json.c | 79 ++++++++++++++++++++++++++++++++++++
+ src/qemu/qemu_monitor_json.h |  4 ++
+ 4 files changed, 117 insertions(+)
+
+diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
+index 86b2b6e985..bc116e4e2d 100644
+--- a/src/qemu/qemu_monitor.c
++++ b/src/qemu/qemu_monitor.c
+@@ -4346,3 +4346,28 @@ qemuMonitorGetSEVMeasurement(qemuMonitorPtr mon)
+ 
+     return qemuMonitorJSONGetSEVMeasurement(mon);
+ }
++
++
++int
++qemuMonitorGetPRManagerInfo(qemuMonitorPtr mon,
++                            virHashTablePtr *retinfo)
++{
++    int ret = -1;
++    virHashTablePtr info = NULL;
++
++    *retinfo = NULL;
++
++    QEMU_CHECK_MONITOR(mon);
++
++    if (!(info = virHashCreate(10, virHashValueFree)))
++        goto cleanup;
++
++    if (qemuMonitorJSONGetPRManagerInfo(mon, info) < 0)
++        goto cleanup;
++
++    VIR_STEAL_PTR(*retinfo, info);
++    ret = 0;
++ cleanup:
++    virHashFree(info);
++    return ret;
++}
+diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
+index a906bc8410..e8ed2d044c 100644
+--- a/src/qemu/qemu_monitor.h
++++ b/src/qemu/qemu_monitor.h
+@@ -1157,4 +1157,13 @@ int qemuMonitorBlockdevDel(qemuMonitorPtr mon,
+ char *
+ qemuMonitorGetSEVMeasurement(qemuMonitorPtr mon);
+ 
++typedef struct _qemuMonitorPRManagerInfo qemuMonitorPRManagerInfo;
++typedef qemuMonitorPRManagerInfo *qemuMonitorPRManagerInfoPtr;
++struct _qemuMonitorPRManagerInfo {
++    bool connected;
++};
++
++int qemuMonitorGetPRManagerInfo(qemuMonitorPtr mon,
++                                virHashTablePtr *retinfo);
++
+ #endif /* QEMU_MONITOR_H */
+diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
+index 03c94cd88b..66c525ed0c 100644
+--- a/src/qemu/qemu_monitor_json.c
++++ b/src/qemu/qemu_monitor_json.c
+@@ -8065,3 +8065,82 @@ qemuMonitorJSONGetSEVMeasurement(qemuMonitorPtr mon)
+     virJSONValueFree(reply);
+     return measurement;
+ }
++
++
++/*
++ * Example return data
++ *
++ * "return": [
++ *   { "connected": true, "id": "pr-helper0" }
++ *  ]
++ */
++static int
++qemuMonitorJSONExtractPRManagerInfo(virJSONValuePtr reply,
++                                    virHashTablePtr info)
++{
++    qemuMonitorPRManagerInfoPtr entry = NULL;
++    virJSONValuePtr data;
++    int ret = -1;
++    size_t i;
++
++    data = virJSONValueObjectGetArray(reply, "return");
++
++    for (i = 0; i < virJSONValueArraySize(data); i++) {
++        virJSONValuePtr prManager = virJSONValueArrayGet(data, i);
++        const char *alias;
++
++        if (!(alias = virJSONValueObjectGetString(prManager, "id")))
++            goto malformed;
++
++        if (VIR_ALLOC(entry) < 0)
++            goto cleanup;
++
++        if (virJSONValueObjectGetBoolean(prManager,
++                                         "connected",
++                                         &entry->connected) < 0) {
++            goto malformed;
++        }
++
++        if (virHashAddEntry(info, alias, entry) < 0)
++            goto cleanup;
++
++        entry = NULL;
++    }
++
++    ret = 0;
++ cleanup:
++    VIR_FREE(entry);
++    return ret;
++
++ malformed:
++    virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
++                   _("malformed prManager reply"));
++    goto cleanup;
++}
++
++
++int
++qemuMonitorJSONGetPRManagerInfo(qemuMonitorPtr mon,
++                                virHashTablePtr info)
++{
++    int ret = -1;
++    virJSONValuePtr cmd;
++    virJSONValuePtr reply = NULL;
++
++    if (!(cmd = qemuMonitorJSONMakeCommand("query-pr-managers",
++                                           NULL)))
++        return -1;
++
++    if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
++        goto cleanup;
++
++    if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_ARRAY) < 0)
++        goto cleanup;
++
++    ret = qemuMonitorJSONExtractPRManagerInfo(reply, info);
++ cleanup:
++    virJSONValueFree(cmd);
++    virJSONValueFree(reply);
++    return ret;
++
++}
+diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
+index 6bc0dd3ad2..66536ceb97 100644
+--- a/src/qemu/qemu_monitor_json.h
++++ b/src/qemu/qemu_monitor_json.h
+@@ -550,4 +550,8 @@ int qemuMonitorJSONBlockdevDel(qemuMonitorPtr mon,
+                                const char *nodename)
+     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+ 
++int qemuMonitorJSONGetPRManagerInfo(qemuMonitorPtr mon,
++                                    virHashTablePtr info)
++    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
++
+ #endif /* QEMU_MONITOR_JSON_H */
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-secret-Add-check-validation-for-correct-usage-when-LookupByUUID.patch b/SOURCES/libvirt-secret-Add-check-validation-for-correct-usage-when-LookupByUUID.patch
new file mode 100644
index 0000000..9707f9d
--- /dev/null
+++ b/SOURCES/libvirt-secret-Add-check-validation-for-correct-usage-when-LookupByUUID.patch
@@ -0,0 +1,78 @@
+From 44b8a63a2e0bcd5740db4c9f49d635ab1d5b9b25 Mon Sep 17 00:00:00 2001
+Message-Id: <44b8a63a2e0bcd5740db4c9f49d635ab1d5b9b25@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Thu, 13 Dec 2018 10:26:46 -0500
+Subject: [PATCH] secret: Add check/validation for correct usage when
+ LookupByUUID
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1656255
+
+If virSecretGetSecretString is using by secretLookupByUUID,
+then it's possible the found sec->usageType doesn't match the
+desired @secretUsageType. If this occurs for the encrypted
+volume creation processing and a subsequent pool refresh is
+executed, then the secret used to create the volume will not
+be found by the storageBackendLoadDefaultSecrets which expects
+to find secrets by VIR_SECRET_USAGE_TYPE_VOLUME.
+
+Add a check to virSecretGetSecretString to avoid the possibility
+along with an error indicating the incorrect matched types.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+ACKed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit e0eb8a8a696ee334fa33281b880e480e76348052)
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/secret/secret_util.c | 17 +++++++++++++++++
+ tests/qemuxml2argvtest.c |  4 +++-
+ 2 files changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/src/secret/secret_util.c b/src/secret/secret_util.c
+index 16e43ab2cc..27e164a425 100644
+--- a/src/secret/secret_util.c
++++ b/src/secret/secret_util.c
+@@ -71,6 +71,23 @@ virSecretGetSecretString(virConnectPtr conn,
+     if (!sec)
+         goto cleanup;
+ 
++    /* NB: NONE is a byproduct of the qemuxml2argvtest test mocking
++     * for UUID lookups. Normal secret XML processing would fail if
++     * the usage type was NONE and since we have no way to set the
++     * expected usage in that environment, let's just accept NONE */
++    if (sec->usageType != VIR_SECRET_USAGE_TYPE_NONE &&
++        sec->usageType != secretUsageType) {
++        char uuidstr[VIR_UUID_STRING_BUFLEN];
++
++        virUUIDFormat(seclookupdef->u.uuid, uuidstr);
++        virReportError(VIR_ERR_INVALID_ARG,
++                       _("secret with uuid %s is of type '%s' not "
++                         "expected '%s' type"),
++                       uuidstr, virSecretUsageTypeToString(sec->usageType),
++                       virSecretUsageTypeToString(secretUsageType));
++        goto cleanup;
++    }
++
+     *secret = conn->secretDriver->secretGetValue(sec, secret_size, 0,
+                                                  VIR_SECRET_GET_VALUE_INTERNAL_CALL);
+ 
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 0908bc5d08..bd4aa1266d 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -80,7 +80,9 @@ static virSecretPtr
+ fakeSecretLookupByUUID(virConnectPtr conn,
+                        const unsigned char *uuid)
+ {
+-    return virGetSecret(conn, uuid, 0, "");
++    /* NB: This mocked value could be "tls" or "volume" depending on
++     * which test is being run, we'll leave at NONE (or 0) */
++    return virGetSecret(conn, uuid, VIR_SECRET_USAGE_TYPE_NONE, "");
+ }
+ 
+ static virSecretDriver fakeSecretDriver = {
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-security-dac-Relabel-dev-sev-in-the-namespace.patch b/SOURCES/libvirt-security-dac-Relabel-dev-sev-in-the-namespace.patch
new file mode 100644
index 0000000..455b247
--- /dev/null
+++ b/SOURCES/libvirt-security-dac-Relabel-dev-sev-in-the-namespace.patch
@@ -0,0 +1,122 @@
+From a95511a2d1f6be0e63af0dc001a92bcb7869d3f8 Mon Sep 17 00:00:00 2001
+Message-Id: <a95511a2d1f6be0e63af0dc001a92bcb7869d3f8@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Fri, 1 Feb 2019 17:21:57 +0100
+Subject: [PATCH] security: dac: Relabel /dev/sev in the namespace
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The default permissions (0600 root:root) are of no use to the qemu
+process so we need to change the owner to qemu iff running with
+namespaces.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 17f6a257f1ea484489277f4da38be914b246a30b)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1665400
+
+ Conflicts:
+        - virSecurityDACSetOwnership's signature had to be adjusted to
+          match the signature of its counterpart in libvirt 4.5.0.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/security/security_dac.c | 51 +++++++++++++++++++++++++++++++++++++
+ 1 file changed, 51 insertions(+)
+
+diff --git a/src/security/security_dac.c b/src/security/security_dac.c
+index 74c70dd092..cc86060e3f 100644
+--- a/src/security/security_dac.c
++++ b/src/security/security_dac.c
+@@ -47,6 +47,7 @@
+ VIR_LOG_INIT("security.security_dac");
+ 
+ #define SECURITY_DAC_NAME "dac"
++#define DEV_SEV "/dev/sev"
+ 
+ typedef struct _virSecurityDACData virSecurityDACData;
+ typedef virSecurityDACData *virSecurityDACDataPtr;
+@@ -1545,6 +1546,16 @@ virSecurityDACRestoreMemoryLabel(virSecurityManagerPtr mgr,
+ }
+ 
+ 
++static int
++virSecurityDACRestoreSEVLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED,
++                              virDomainDefPtr def ATTRIBUTE_UNUSED)
++{
++    /* we only label /dev/sev when running with namespaces, so we don't need to
++     * restore anything */
++    return 0;
++}
++
++
+ static int
+ virSecurityDACRestoreAllLabel(virSecurityManagerPtr mgr,
+                               virDomainDefPtr def,
+@@ -1615,6 +1626,11 @@ virSecurityDACRestoreAllLabel(virSecurityManagerPtr mgr,
+             rc = -1;
+     }
+ 
++    if (def->sev) {
++        if (virSecurityDACRestoreSEVLabel(mgr, def) < 0)
++            rc = -1;
++    }
++
+     if (def->os.loader && def->os.loader->nvram &&
+         virSecurityDACRestoreFileLabel(priv, def->os.loader->nvram) < 0)
+         rc = -1;
+@@ -1670,6 +1686,36 @@ virSecurityDACSetMemoryLabel(virSecurityManagerPtr mgr,
+ }
+ 
+ 
++static int
++virSecurityDACSetSEVLabel(virSecurityManagerPtr mgr,
++                          virDomainDefPtr def)
++{
++    virSecurityDACDataPtr priv = virSecurityManagerGetPrivateData(mgr);
++    virSecurityLabelDefPtr seclabel;
++    uid_t user;
++    gid_t group;
++
++    /* Skip chowning /dev/sev if namespaces are disabled as we'd significantly
++     * increase the chance of a DOS attack on SEV
++     */
++    if (!priv->mountNamespace)
++        return 0;
++
++    seclabel = virDomainDefGetSecurityLabelDef(def, SECURITY_DAC_NAME);
++    if (seclabel && !seclabel->relabel)
++        return 0;
++
++    if (virSecurityDACGetIds(seclabel, priv, &user, &group, NULL, NULL) < 0)
++        return -1;
++
++    if (virSecurityDACSetOwnership(priv, NULL, DEV_SEV,
++                                   user, group) < 0)
++        return -1;
++
++    return 0;
++}
++
++
+ static int
+ virSecurityDACSetAllLabel(virSecurityManagerPtr mgr,
+                           virDomainDefPtr def,
+@@ -1740,6 +1786,11 @@ virSecurityDACSetAllLabel(virSecurityManagerPtr mgr,
+             return -1;
+     }
+ 
++    if (def->sev) {
++        if (virSecurityDACSetSEVLabel(mgr, def) < 0)
++            return -1;
++    }
++
+     if (virSecurityDACGetImageIds(secdef, priv, &user, &group))
+         return -1;
+ 
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-security-dac-also-label-listen-UNIX-sockets.patch b/SOURCES/libvirt-security-dac-also-label-listen-UNIX-sockets.patch
new file mode 100644
index 0000000..ba1e312
--- /dev/null
+++ b/SOURCES/libvirt-security-dac-also-label-listen-UNIX-sockets.patch
@@ -0,0 +1,64 @@
+From d81bacdc16215d7cf0d175187f1d342e1081cf33 Mon Sep 17 00:00:00 2001
+Message-Id: <d81bacdc16215d7cf0d175187f1d342e1081cf33@dist-git>
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
+Date: Tue, 2 Oct 2018 14:00:41 +0200
+Subject: [PATCH] security: dac: also label listen UNIX sockets
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We switched to opening mode='bind' sockets ourselves:
+commit 30fb2276d88b275dc2aad6ddd28c100d944b59a5
+    qemu: support passing pre-opened UNIX socket listen FD
+in v4.5.0-rc1~251
+
+Then fixed qemuBuildChrChardevStr to change libvirtd's label
+while creating the socket:
+commit b0c6300fc42bbc3e5eb0b236392f7344581c5810
+    qemu: ensure FDs passed to QEMU for chardevs have correct SELinux labels
+v4.5.0-rc1~52
+
+Also add labeling of these sockets to the DAC driver.
+Instead of duplicating the logic which decides whether libvirt should
+pre-create the socket, assume an existing path meaning that it was created
+by libvirt.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1633389
+
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit d6b8838dd83697f721fe0706068df765148154de)
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+
+RHEL 8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1634775
+
+Conflicts: src/security/security_dac.c
+    commit 3ac7793ad1ae0f4dc7b7ddbcfd182d5ff0b45538
+      security_dac: Pass virSecurityManagerPtr to virSecurityDACSetOwnership
+    is not backported
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/security/security_dac.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/src/security/security_dac.c b/src/security/security_dac.c
+index 4b623dcf39..74c70dd092 100644
+--- a/src/security/security_dac.c
++++ b/src/security/security_dac.c
+@@ -1248,7 +1248,12 @@ virSecurityDACSetChardevLabel(virSecurityManagerPtr mgr,
+         break;
+ 
+     case VIR_DOMAIN_CHR_TYPE_UNIX:
+-        if (!dev_source->data.nix.listen) {
++        if (!dev_source->data.nix.listen ||
++            (dev_source->data.nix.path &&
++             virFileExists(dev_source->data.nix.path))) {
++            /* Also label mode='bind' sockets if they exist,
++             * e.g. because they were created by libvirt
++             * and passed via FD */
+             if (virSecurityDACSetOwnership(priv, NULL,
+                                            dev_source->data.nix.path,
+                                            user, group) < 0)
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-src-Fix-memory-leak-in-virNWFilterBindingDispose.patch b/SOURCES/libvirt-src-Fix-memory-leak-in-virNWFilterBindingDispose.patch
new file mode 100644
index 0000000..8c4740c
--- /dev/null
+++ b/SOURCES/libvirt-src-Fix-memory-leak-in-virNWFilterBindingDispose.patch
@@ -0,0 +1,69 @@
+From a9c5b686c6eeb63ad98603dc99ee95bb0dafda62 Mon Sep 17 00:00:00 2001
+Message-Id: <a9c5b686c6eeb63ad98603dc99ee95bb0dafda62@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Sat, 21 Jul 2018 09:34:12 -0400
+Subject: [PATCH] src: Fix memory leak in virNWFilterBindingDispose
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1603025
+
+Commit b57a9aec neglected to VIR_FREE(binding->filtername) as seen
+in the following valgrind report
+
+==6423== 17,328 bytes in 1,083 blocks are definitely lost in loss record 2,275 of 2,297
+==6423==    at 0x4C29BC3: malloc (vg_replace_malloc.c:299)
+==6423==    by 0x83B20C9: strdup (in /usr/lib64/libc-2.17.so)
+==6423==    by 0x533C144: virStrdup (virstring.c:977)
+==6423==    by 0x54BDD53: virGetNWFilterBinding (datatypes.c:865)
+==6423==    by 0x318D633C: nwfilterBindingCreateXML (nwfilter_driver.c:767)
+==6423==    by 0x54F3FC5: virNWFilterBindingCreateXML (libvirt-nwfilter.c:701)
+==6423==    by 0x539CE29: virDomainConfNWFilterInstantiate (domain_nwfilter.c:116)
+==6423==    by 0x31E516C2: qemuInterfaceBridgeConnect (qemu_interface.c:589)
+==6423==    by 0x31D98B56: qemuBuildInterfaceCommandLine (qemu_command.c:8418)
+==6423==    by 0x31D9F783: qemuBuildNetCommandLine (qemu_command.c:8673)
+==6423==    by 0x31D9F783: qemuBuildCommandLine (qemu_command.c:10354)
+==6423==    by 0x31DE355F: qemuProcessLaunch (qemu_process.c:6292)
+==6423==    by 0x31DE7881: qemuProcessStart (qemu_process.c:6686)
+
+and
+
+==6423== 17,328 bytes in 1,083 blocks are definitely lost in loss record 2,276 of 2,297
+==6423==    at 0x4C29BC3: malloc (vg_replace_malloc.c:299)
+==6423==    by 0x83B20C9: strdup (in /usr/lib64/libc-2.17.so)
+==6423==    by 0x533C144: virStrdup (virstring.c:977)
+==6423==    by 0x54BDD53: virGetNWFilterBinding (datatypes.c:865)
+==6423==    by 0x318D641F: nwfilterBindingLookupByPortDev (nwfilter_driver.c:678)
+==6423==    by 0x54F3B63: virNWFilterBindingLookupByPortDev (libvirt-nwfilter.c:593)
+==6423==    by 0x539CBC5: virDomainConfNWFilterTeardownImpl.isra.0 (domain_nwfilter.c:136)
+==6423==    by 0x539CFA5: virDomainConfVMNWFilterTeardown (domain_nwfilter.c:170)
+==6423==    by 0x31DE5651: qemuProcessStop (qemu_process.c:6912)
+==6423==    by 0x31E37974: qemuDomainDestroyFlags (qemu_driver.c:2229)
+==6423==    by 0x54C24BB: virDomainDestroy (libvirt-domain.c:475)
+==6423==    by 0x1589A2: remoteDispatchDomainDestroy (remote_daemon_dispatch_stubs.h:4827)
+==6423==    by 0x1589A2: remoteDispatchDomainDestroyHelper (remote_daemon_dispatch_stubs.h:4803)
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 329f2347d2215edb3925ec21c73bb52b7b5aa310)
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+---
+ src/datatypes.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/datatypes.c b/src/datatypes.c
+index 878a1c5b5f..caf035f178 100644
+--- a/src/datatypes.c
++++ b/src/datatypes.c
+@@ -893,6 +893,7 @@ virNWFilterBindingDispose(void *obj)
+     VIR_DEBUG("release binding %p %s", binding, binding->portdev);
+ 
+     VIR_FREE(binding->portdev);
++    VIR_FREE(binding->filtername);
+     virObjectUnref(binding->conn);
+ }
+ 
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-src-Mention-DEVICE_REMOVAL_FAILED-event-in-virDomainDetachDeviceAlias-docs.patch b/SOURCES/libvirt-src-Mention-DEVICE_REMOVAL_FAILED-event-in-virDomainDetachDeviceAlias-docs.patch
new file mode 100644
index 0000000..5fd3c45
--- /dev/null
+++ b/SOURCES/libvirt-src-Mention-DEVICE_REMOVAL_FAILED-event-in-virDomainDetachDeviceAlias-docs.patch
@@ -0,0 +1,40 @@
+From 3b6518493a141a524853595e8400087069f4600e Mon Sep 17 00:00:00 2001
+Message-Id: <3b6518493a141a524853595e8400087069f4600e@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 4 Jul 2018 14:51:18 +0200
+Subject: [PATCH] src: Mention DEVICE_REMOVAL_FAILED event in
+ virDomainDetachDeviceAlias docs
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1598087
+
+We are mentioning the positive outcome of the function and not
+the case when live detaching a device is denied and event is
+issued.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 7152b12c45f69861f41f87916e4b950d2c1ff9fd)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/libvirt-domain.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
+index c71f2e6877..ab7266dc19 100644
+--- a/src/libvirt-domain.c
++++ b/src/libvirt-domain.c
+@@ -8365,7 +8365,9 @@ virDomainUpdateDeviceFlags(virDomainPtr domain,
+  * asynchronous - it returns immediately after sending the detach
+  * request to the hypervisor. It's caller's responsibility to
+  * wait for VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED event to signal
+- * actual device removal.
++ * actual device removal or for
++ * VIR_DOMAIN_EVENT_ID_DEVICE_REMOVAL_FAILED to signal rejected
++ * device removal.
+  *
+  * Returns 0 in case of success, -1 in case of failure.
+  */
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-storage-Add-shrink-to-qemu-img-command-when-shrinking-vol.patch b/SOURCES/libvirt-storage-Add-shrink-to-qemu-img-command-when-shrinking-vol.patch
new file mode 100644
index 0000000..59e5ef3
--- /dev/null
+++ b/SOURCES/libvirt-storage-Add-shrink-to-qemu-img-command-when-shrinking-vol.patch
@@ -0,0 +1,47 @@
+From 62e80840d9e18319b080e183201d509a2b78b40f Mon Sep 17 00:00:00 2001
+Message-Id: <62e80840d9e18319b080e183201d509a2b78b40f@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Mon, 27 Aug 2018 08:23:52 -0400
+Subject: [PATCH] storage: Add --shrink to qemu-img command when shrinking vol
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1613746
+
+When shrinking the capacity of a qcow2 or luks volume using
+the qemu-img program, the --shrink qualifier must be added.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit b04d1b6a35f9fb826f7bb83fdac364a127ec75ca)
+https: //bugzilla.redhat.com/show_bug.cgi?id=1622534
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ src/storage/storage_util.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
+index a701a75702..5dc22d3182 100644
+--- a/src/storage/storage_util.c
++++ b/src/storage/storage_util.c
+@@ -2287,12 +2287,12 @@ storageBackendResizeQemuImg(virStoragePoolObjPtr pool,
+      * a multiple of 512 */
+     capacity = VIR_ROUND_UP(capacity, 512);
+ 
+-    cmd = virCommandNew(img_tool);
++    cmd = virCommandNewArgList(img_tool, "resize", NULL);
++    if (capacity < vol->target.capacity)
++        virCommandAddArg(cmd, "--shrink");
+     if (!vol->target.encryption) {
+-        virCommandAddArgList(cmd, "resize", vol->target.path, NULL);
++        virCommandAddArg(cmd, vol->target.path);
+     } else {
+-        virCommandAddArg(cmd, "resize");
+-
+         if (storageBackendCreateQemuImgSecretObject(cmd, secretPath,
+                                                     secretAlias) < 0)
+             goto cleanup;
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-storage-Allow-for-inputvol-to-have-any-format-for-encryption.patch b/SOURCES/libvirt-storage-Allow-for-inputvol-to-have-any-format-for-encryption.patch
new file mode 100644
index 0000000..9ca6a51
--- /dev/null
+++ b/SOURCES/libvirt-storage-Allow-for-inputvol-to-have-any-format-for-encryption.patch
@@ -0,0 +1,137 @@
+From fdbb929cb1f83931378f9910a2922bf9d68f0c04 Mon Sep 17 00:00:00 2001
+Message-Id: <fdbb929cb1f83931378f9910a2922bf9d68f0c04@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Fri, 2 Nov 2018 16:57:11 +0100
+Subject: [PATCH] storage: Allow for inputvol to have any format for encryption
+
+Commit 39cef12a9 altered/fixed the inputvol processing to create
+a multistep process when using an inputvol to create an encrypted
+output volume; however, it unnecessarily assumed/restricted the
+inputvol to be of 'raw' format only.
+
+Modify the processing code to allow the inputvol format to be checked
+and used in order to create the encrypted volume.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+ACKed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 80414718587ab8dd97025ec9145f30fa1a3654ed)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1645459
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/storage/storage_util.c                    | 14 ++++++++++++-
+ .../luks-convert-qcow2.argv                   |  9 ++++++++
+ tests/storagevolxml2argvtest.c                |  4 ++++
+ tests/storagevolxml2xmlin/vol-file-qcow2.xml  | 21 +++++++++++++++++++
+ 4 files changed, 47 insertions(+), 1 deletion(-)
+ create mode 100644 tests/storagevolxml2argvdata/luks-convert-qcow2.argv
+ create mode 100644 tests/storagevolxml2xmlin/vol-file-qcow2.xml
+
+diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
+index 19e58714ca..c5e773ab6d 100644
+--- a/src/storage/storage_util.c
++++ b/src/storage/storage_util.c
+@@ -692,6 +692,7 @@ storagePloopResize(virStorageVolDefPtr vol,
+ struct _virStorageBackendQemuImgInfo {
+     int format;
+     const char *type;
++    const char *inputType;
+     const char *path;
+     unsigned long long size_arg;
+     unsigned long long allocation;
+@@ -1014,6 +1015,15 @@ virStorageBackendCreateQemuImgSetInfo(virStoragePoolObjPtr pool,
+         return -1;
+     }
+ 
++    if (inputvol &&
++        !(info->inputType =
++          virStorageFileFormatTypeToString(inputvol->target.format))) {
++        virReportError(VIR_ERR_INTERNAL_ERROR,
++                       _("unknown inputvol storage vol type %d"),
++                       inputvol->target.format);
++        return -1;
++    }
++
+     if (info->preallocate && info->format != VIR_STORAGE_FILE_QCOW2) {
+         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                        _("metadata preallocation only available with qcow2"));
+@@ -1073,6 +1083,7 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
+     struct _virStorageBackendQemuImgInfo info = {
+         .format = vol->target.format,
+         .type = NULL,
++        .inputType = NULL,
+         .path = vol->target.path,
+         .allocation = vol->target.allocation,
+         .encryption = !!vol->target.encryption,
+@@ -1145,7 +1156,8 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
+             virCommandAddArgFormat(cmd, "%lluK", info.size_arg);
+     } else {
+         /* source */
+-        virCommandAddArgFormat(cmd, "driver=raw,file.filename=%s",
++        virCommandAddArgFormat(cmd, "driver=%s,file.filename=%s",
++                               info.inputType ? info.inputType : "raw",
+                                info.inputPath);
+ 
+         /* dest */
+diff --git a/tests/storagevolxml2argvdata/luks-convert-qcow2.argv b/tests/storagevolxml2argvdata/luks-convert-qcow2.argv
+new file mode 100644
+index 0000000000..9124f5f27c
+--- /dev/null
++++ b/tests/storagevolxml2argvdata/luks-convert-qcow2.argv
+@@ -0,0 +1,9 @@
++qemu-img create -f luks \
++--object secret,id=OtherDemo.img_encrypt0,file=/path/to/secretFile \
++-o key-secret=OtherDemo.img_encrypt0 \
++/var/lib/libvirt/images/OtherDemo.img 5242880K
++qemu-img convert --image-opts -n --target-image-opts \
++--object secret,id=OtherDemo.img_encrypt0,file=/path/to/secretFile \
++driver=qcow2,file.filename=/var/lib/libvirt/images/sparse-qcow2.img \
++driver=luks,file.filename=/var/lib/libvirt/images/OtherDemo.img,\
++key-secret=OtherDemo.img_encrypt0
+diff --git a/tests/storagevolxml2argvtest.c b/tests/storagevolxml2argvtest.c
+index b795f83aee..6a9a080dd1 100644
+--- a/tests/storagevolxml2argvtest.c
++++ b/tests/storagevolxml2argvtest.c
+@@ -284,6 +284,10 @@ mymain(void)
+             "pool-dir", "vol-file",
+             "luks-convert", 0);
+ 
++    DO_TEST("pool-dir", "vol-luks-convert",
++            "pool-dir", "vol-file-qcow2",
++            "luks-convert-qcow2", 0);
++
+     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+ }
+ 
+diff --git a/tests/storagevolxml2xmlin/vol-file-qcow2.xml b/tests/storagevolxml2xmlin/vol-file-qcow2.xml
+new file mode 100644
+index 0000000000..025e7e0239
+--- /dev/null
++++ b/tests/storagevolxml2xmlin/vol-file-qcow2.xml
+@@ -0,0 +1,21 @@
++<volume>
++  <name>sparse-qcow2.img</name>
++  <source/>
++  <capacity unit="TiB">1</capacity>
++  <allocation unit="bytes">0</allocation>
++  <target>
++    <path>/var/lib/libvirt/images/sparse-qcow2.img</path>
++    <format type="qcow2"/>
++    <permissions>
++      <mode>0</mode>
++      <owner>0744</owner>
++      <group>0</group>
++      <label>virt_image_t</label>
++    </permissions>
++    <timestamps>
++      <atime>1341933637.273190990</atime>
++      <mtime>1341930622.047245868</mtime>
++      <ctime>1341930622.047245868</ctime>
++    </timestamps>
++  </target>
++</volume>
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-storage-Allow-inputvol-to-be-encrypted.patch b/SOURCES/libvirt-storage-Allow-inputvol-to-be-encrypted.patch
new file mode 100644
index 0000000..dcba08c
--- /dev/null
+++ b/SOURCES/libvirt-storage-Allow-inputvol-to-be-encrypted.patch
@@ -0,0 +1,347 @@
+From a882d10a1eaa02210e048f4a00917c8b30b0c4e6 Mon Sep 17 00:00:00 2001
+Message-Id: <a882d10a1eaa02210e048f4a00917c8b30b0c4e6@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Fri, 2 Nov 2018 16:57:12 +0100
+Subject: [PATCH] storage: Allow inputvol to be encrypted
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1613737
+
+When processing the inputvol for encryption, we need to handle
+the case where the inputvol is encrypted. This then allows for
+the encrypted inputvol to be used either for an output encrypted
+volume or an output volume of some XML provided type.
+
+Add tests to show the various conversion options when either input
+or output is encrypted. This includes when both are encrypted.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+ACKed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit b975afc72504e636ec538ea119bee9a0cd7b63d8)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1645459
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/storage/storage_util.c                    | 64 ++++++++++++++++---
+ src/storage/storage_util.h                    |  1 +
+ .../luks-convert-encrypt.argv                 | 11 ++++
+ .../luks-convert-encrypt2fileqcow2.argv       |  7 ++
+ .../luks-convert-encrypt2fileraw.argv         |  7 ++
+ tests/storagevolxml2argvtest.c                | 15 ++++-
+ tests/storagevolxml2xmlin/vol-encrypt1.xml    | 21 ++++++
+ tests/storagevolxml2xmlin/vol-encrypt2.xml    | 21 ++++++
+ 8 files changed, 138 insertions(+), 9 deletions(-)
+ create mode 100644 tests/storagevolxml2argvdata/luks-convert-encrypt.argv
+ create mode 100644 tests/storagevolxml2argvdata/luks-convert-encrypt2fileqcow2.argv
+ create mode 100644 tests/storagevolxml2argvdata/luks-convert-encrypt2fileraw.argv
+ create mode 100644 tests/storagevolxml2xmlin/vol-encrypt1.xml
+ create mode 100644 tests/storagevolxml2xmlin/vol-encrypt2.xml
+
+diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
+index c5e773ab6d..90a02d19df 100644
+--- a/src/storage/storage_util.c
++++ b/src/storage/storage_util.c
+@@ -1077,6 +1077,7 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
+                                          unsigned int flags,
+                                          const char *create_tool,
+                                          const char *secretPath,
++                                         const char *inputSecretPath,
+                                          virStorageVolEncryptConvertStep convertStep)
+ {
+     virCommandPtr cmd = NULL;
+@@ -1094,6 +1095,8 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
+         .secretAlias = NULL,
+     };
+     virStorageEncryptionPtr enc = vol->target.encryption;
++    char *inputSecretAlias = NULL;
++    virStorageEncryptionPtr inputenc = inputvol ? inputvol->target.encryption : NULL;
+     virStorageEncryptionInfoDefPtr encinfo = NULL;
+ 
+     virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, NULL);
+@@ -1107,6 +1110,12 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
+         goto error;
+     }
+ 
++    if (inputenc && inputenc->format != VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) {
++        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                       _("encryption format of inputvol must be LUKS"));
++        goto error;
++    }
++
+     if (virStorageBackendCreateQemuImgSetInfo(pool, vol, inputvol,
+                                               convertStep, &info) < 0)
+         goto error;
+@@ -1146,6 +1155,20 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
+         encinfo = &enc->encinfo;
+     }
+ 
++    if (inputenc && convertStep == VIR_STORAGE_VOL_ENCRYPT_CONVERT) {
++        if (!inputSecretPath) {
++            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
++                           _("path to inputvol secret data file is required"));
++            goto error;
++        }
++        if (virAsprintf(&inputSecretAlias, "%s_encrypt0",
++                        inputvol->name) < 0)
++            goto error;
++        if (storageBackendCreateQemuImgSecretObject(cmd, inputSecretPath,
++                                                    inputSecretAlias) < 0)
++            goto error;
++    }
++
+     if (convertStep != VIR_STORAGE_VOL_ENCRYPT_CONVERT) {
+         if (storageBackendCreateQemuImgSetOptions(cmd, encinfo, info) < 0)
+             goto error;
+@@ -1156,20 +1179,33 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
+             virCommandAddArgFormat(cmd, "%lluK", info.size_arg);
+     } else {
+         /* source */
+-        virCommandAddArgFormat(cmd, "driver=%s,file.filename=%s",
+-                               info.inputType ? info.inputType : "raw",
+-                               info.inputPath);
++        if (inputenc)
++            virCommandAddArgFormat(cmd,
++                                   "driver=luks,file.filename=%s,key-secret=%s",
++                                   info.inputPath, inputSecretAlias);
++        else
++            virCommandAddArgFormat(cmd, "driver=%s,file.filename=%s",
++                                   info.inputType ? info.inputType : "raw",
++                                   info.inputPath);
+ 
+         /* dest */
+-        virCommandAddArgFormat(cmd, "driver=%s,file.filename=%s,key-secret=%s",
+-                               info.type, info.path, info.secretAlias);
++        if (enc)
++            virCommandAddArgFormat(cmd,
++                                   "driver=%s,file.filename=%s,key-secret=%s",
++                                   info.type, info.path, info.secretAlias);
++        else
++            virCommandAddArgFormat(cmd, "driver=%s,file.filename=%s",
++                                   info.type, info.path);
++
+     }
+     VIR_FREE(info.secretAlias);
++    VIR_FREE(inputSecretAlias);
+ 
+     return cmd;
+ 
+  error:
+     VIR_FREE(info.secretAlias);
++    VIR_FREE(inputSecretAlias);
+     virCommandFree(cmd);
+     return NULL;
+ }
+@@ -1255,6 +1291,7 @@ storageBackendDoCreateQemuImg(virStoragePoolObjPtr pool,
+                               unsigned int flags,
+                               const char *create_tool,
+                               const char *secretPath,
++                              const char *inputSecretPath,
+                               virStorageVolEncryptConvertStep convertStep)
+ {
+     int ret;
+@@ -1262,7 +1299,8 @@ storageBackendDoCreateQemuImg(virStoragePoolObjPtr pool,
+ 
+     cmd = virStorageBackendCreateQemuImgCmdFromVol(pool, vol, inputvol,
+                                                    flags, create_tool,
+-                                                   secretPath, convertStep);
++                                                   secretPath, inputSecretPath,
++                                                   convertStep);
+     if (!cmd)
+         return -1;
+ 
+@@ -1283,6 +1321,7 @@ storageBackendCreateQemuImg(virStoragePoolObjPtr pool,
+     int ret = -1;
+     char *create_tool;
+     char *secretPath = NULL;
++    char *inputSecretPath = NULL;
+     virStorageVolEncryptConvertStep convertStep = VIR_STORAGE_VOL_ENCRYPT_NONE;
+ 
+     virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, -1);
+@@ -1299,16 +1338,21 @@ storageBackendCreateQemuImg(virStoragePoolObjPtr pool,
+         !(secretPath = storageBackendCreateQemuImgSecretPath(pool, vol)))
+         goto cleanup;
+ 
++    if (inputvol && inputvol->target.encryption &&
++        !(inputSecretPath = storageBackendCreateQemuImgSecretPath(pool,
++                                                                  inputvol)))
++        goto cleanup;
++
+     /* Using an input file for encryption requires a multi-step process
+      * to create an image of the same size as the inputvol and then to
+      * convert the inputvol afterwards. */
+-    if (secretPath && inputvol)
++    if ((secretPath || inputSecretPath) && inputvol)
+         convertStep = VIR_STORAGE_VOL_ENCRYPT_CREATE;
+ 
+     do {
+         ret = storageBackendDoCreateQemuImg(pool, vol, inputvol, flags,
+                                             create_tool, secretPath,
+-                                            convertStep);
++                                            inputSecretPath, convertStep);
+ 
+         /* Failure to convert, attempt to delete what we created */
+         if (ret < 0 && convertStep == VIR_STORAGE_VOL_ENCRYPT_CONVERT)
+@@ -1330,6 +1374,10 @@ storageBackendCreateQemuImg(virStoragePoolObjPtr pool,
+         unlink(secretPath);
+         VIR_FREE(secretPath);
+     }
++    if (inputSecretPath) {
++        unlink(inputSecretPath);
++        VIR_FREE(inputSecretPath);
++    }
+     VIR_FREE(create_tool);
+     return ret;
+ }
+diff --git a/src/storage/storage_util.h b/src/storage/storage_util.h
+index 6fc8e8972c..58b991c772 100644
+--- a/src/storage/storage_util.h
++++ b/src/storage/storage_util.h
+@@ -167,6 +167,7 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
+                                          unsigned int flags,
+                                          const char *create_tool,
+                                          const char *secretPath,
++                                         const char *inputSecretPath,
+                                          virStorageVolEncryptConvertStep convertStep);
+ 
+ int virStorageBackendSCSIFindLUs(virStoragePoolObjPtr pool,
+diff --git a/tests/storagevolxml2argvdata/luks-convert-encrypt.argv b/tests/storagevolxml2argvdata/luks-convert-encrypt.argv
+new file mode 100644
+index 0000000000..b2ad16b7cb
+--- /dev/null
++++ b/tests/storagevolxml2argvdata/luks-convert-encrypt.argv
+@@ -0,0 +1,11 @@
++qemu-img create -f luks \
++--object secret,id=encrypt2.img_encrypt0,file=/path/to/secretFile \
++-o key-secret=encrypt2.img_encrypt0 \
++/var/lib/libvirt/images/encrypt2.img 5242880K
++qemu-img convert --image-opts -n --target-image-opts \
++--object secret,id=encrypt2.img_encrypt0,file=/path/to/secretFile \
++--object secret,id=encrypt1.img_encrypt0,file=/path/to/inputSecretFile \
++driver=luks,file.filename=/var/lib/libvirt/images/encrypt1.img,\
++key-secret=encrypt1.img_encrypt0 \
++driver=luks,file.filename=/var/lib/libvirt/images/encrypt2.img,\
++key-secret=encrypt2.img_encrypt0
+diff --git a/tests/storagevolxml2argvdata/luks-convert-encrypt2fileqcow2.argv b/tests/storagevolxml2argvdata/luks-convert-encrypt2fileqcow2.argv
+new file mode 100644
+index 0000000000..82cb364b61
+--- /dev/null
++++ b/tests/storagevolxml2argvdata/luks-convert-encrypt2fileqcow2.argv
+@@ -0,0 +1,7 @@
++qemu-img create -f qcow2 \
++-o compat=0.10 /var/lib/libvirt/images/sparse-qcow2.img 1073741824K
++qemu-img convert --image-opts -n --target-image-opts \
++--object secret,id=encrypt2.img_encrypt0,file=/path/to/inputSecretFile \
++driver=luks,file.filename=/var/lib/libvirt/images/encrypt2.img,\
++key-secret=encrypt2.img_encrypt0 \
++driver=qcow2,file.filename=/var/lib/libvirt/images/sparse-qcow2.img
+diff --git a/tests/storagevolxml2argvdata/luks-convert-encrypt2fileraw.argv b/tests/storagevolxml2argvdata/luks-convert-encrypt2fileraw.argv
+new file mode 100644
+index 0000000000..2661c345a8
+--- /dev/null
++++ b/tests/storagevolxml2argvdata/luks-convert-encrypt2fileraw.argv
+@@ -0,0 +1,7 @@
++qemu-img create -f raw \
++/var/lib/libvirt/images/sparse.img 1073741824K
++qemu-img convert --image-opts -n --target-image-opts \
++--object secret,id=encrypt2.img_encrypt0,file=/path/to/inputSecretFile \
++driver=luks,file.filename=/var/lib/libvirt/images/encrypt2.img,\
++key-secret=encrypt2.img_encrypt0 \
++driver=raw,file.filename=/var/lib/libvirt/images/sparse.img
+diff --git a/tests/storagevolxml2argvtest.c b/tests/storagevolxml2argvtest.c
+index 6a9a080dd1..105705f348 100644
+--- a/tests/storagevolxml2argvtest.c
++++ b/tests/storagevolxml2argvtest.c
+@@ -85,7 +85,7 @@ testCompareXMLToArgvFiles(bool shouldFail,
+      * convert the inputvol afterwards. Since we only care about the
+      * command line we have to copy code from storageBackendCreateQemuImg
+      * and adjust it for the test needs. */
+-    if (inputvol && vol->target.encryption)
++    if (inputvol && (vol->target.encryption || inputvol->target.encryption))
+         convertStep = VIR_STORAGE_VOL_ENCRYPT_CREATE;
+ 
+     do {
+@@ -93,6 +93,7 @@ testCompareXMLToArgvFiles(bool shouldFail,
+                                                        inputvol, flags,
+                                                        create_tool,
+                                                        "/path/to/secretFile",
++                                                       "/path/to/inputSecretFile",
+                                                        convertStep);
+         if (!cmd) {
+             if (shouldFail) {
+@@ -288,6 +289,18 @@ mymain(void)
+             "pool-dir", "vol-file-qcow2",
+             "luks-convert-qcow2", 0);
+ 
++    DO_TEST("pool-dir", "vol-encrypt2",
++            "pool-dir", "vol-encrypt1",
++            "luks-convert-encrypt", 0);
++
++    DO_TEST("pool-dir", "vol-file",
++            "pool-dir", "vol-encrypt2",
++            "luks-convert-encrypt2fileraw", 0);
++
++    DO_TEST("pool-dir", "vol-file-qcow2",
++            "pool-dir", "vol-encrypt2",
++            "luks-convert-encrypt2fileqcow2", 0);
++
+     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+ }
+ 
+diff --git a/tests/storagevolxml2xmlin/vol-encrypt1.xml b/tests/storagevolxml2xmlin/vol-encrypt1.xml
+new file mode 100644
+index 0000000000..681734dc7b
+--- /dev/null
++++ b/tests/storagevolxml2xmlin/vol-encrypt1.xml
+@@ -0,0 +1,21 @@
++<volume>
++  <name>encrypt1.img</name>
++  <key>/var/lib/libvirt/images/encrypt1.img</key>
++  <source>
++  </source>
++  <capacity unit="G">5</capacity>
++  <allocation>294912</allocation>
++  <target>
++    <path>/var/lib/libvirt/images/encrypt1.img</path>
++    <format type='raw'/>
++    <permissions>
++      <mode>0644</mode>
++      <owner>0</owner>
++      <group>0</group>
++      <label>unconfined_u:object_r:virt_image_t:s0</label>
++    </permissions>
++    <encryption format='luks'>
++      <secret type='passphrase' uuid='e78d4b51-a2af-485f-b0f5-afca709a80f4'/>
++    </encryption>
++  </target>
++</volume>
+diff --git a/tests/storagevolxml2xmlin/vol-encrypt2.xml b/tests/storagevolxml2xmlin/vol-encrypt2.xml
+new file mode 100644
+index 0000000000..0507d3b9e6
+--- /dev/null
++++ b/tests/storagevolxml2xmlin/vol-encrypt2.xml
+@@ -0,0 +1,21 @@
++<volume>
++  <name>encrypt2.img</name>
++  <key>/var/lib/libvirt/images/encrypt2.img</key>
++  <source>
++  </source>
++  <capacity unit="G">5</capacity>
++  <allocation>294912</allocation>
++  <target>
++    <path>/var/lib/libvirt/images/encrypt2.img</path>
++    <format type='raw'/>
++    <permissions>
++      <mode>0644</mode>
++      <owner>0</owner>
++      <group>0</group>
++      <label>unconfined_u:object_r:virt_image_t:s0</label>
++    </permissions>
++    <encryption format='luks'>
++      <secret type='passphrase' uuid='e78d4b51-a2af-485f-b0f5-afca709af480'/>
++    </encryption>
++  </target>
++</volume>
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-storage-Remove-secretPath-from-_virStorageBackendQemuImgInfo.patch b/SOURCES/libvirt-storage-Remove-secretPath-from-_virStorageBackendQemuImgInfo.patch
new file mode 100644
index 0000000..335a415
--- /dev/null
+++ b/SOURCES/libvirt-storage-Remove-secretPath-from-_virStorageBackendQemuImgInfo.patch
@@ -0,0 +1,61 @@
+From 6146c60df8ac981e06828ca13d1f935af866028a Mon Sep 17 00:00:00 2001
+Message-Id: <6146c60df8ac981e06828ca13d1f935af866028a@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Fri, 2 Nov 2018 16:57:10 +0100
+Subject: [PATCH] storage: Remove secretPath from _virStorageBackendQemuImgInfo
+
+There's really no need for it to be there since it's only ever
+used inside virStorageBackendCreateQemuImgCmdFromVol
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+ACKed-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit f6aa977fab1108e652ab8c360a651045c727d02e)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1645459
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/storage/storage_util.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
+index 5dc22d3182..19e58714ca 100644
+--- a/src/storage/storage_util.c
++++ b/src/storage/storage_util.c
+@@ -709,7 +709,6 @@ struct _virStorageBackendQemuImgInfo {
+     int inputFormat;
+ 
+     char *secretAlias;
+-    const char *secretPath;
+ };
+ 
+ 
+@@ -1081,7 +1080,6 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
+         .compat = vol->target.compat,
+         .features = vol->target.features,
+         .nocow = vol->target.nocow,
+-        .secretPath = secretPath,
+         .secretAlias = NULL,
+     };
+     virStorageEncryptionPtr enc = vol->target.encryption;
+@@ -1124,14 +1122,14 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
+         virCommandAddArgList(cmd, "-b", info.backingPath, NULL);
+ 
+     if (enc) {
+-        if (!info.secretPath) {
++        if (!secretPath) {
+             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                            _("path to secret data file is required"));
+             goto error;
+         }
+         if (virAsprintf(&info.secretAlias, "%s_encrypt0", vol->name) < 0)
+             goto error;
+-        if (storageBackendCreateQemuImgSecretObject(cmd, info.secretPath,
++        if (storageBackendCreateQemuImgSecretObject(cmd, secretPath,
+                                                     info.secretAlias) < 0)
+             goto error;
+         encinfo = &enc->encinfo;
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-tests-Add-capabilities-data-for-QEMU-2.11-x86_64.patch b/SOURCES/libvirt-tests-Add-capabilities-data-for-QEMU-2.11-x86_64.patch
new file mode 100644
index 0000000..cf56716
--- /dev/null
+++ b/SOURCES/libvirt-tests-Add-capabilities-data-for-QEMU-2.11-x86_64.patch
@@ -0,0 +1,20429 @@
+From fcfd7a32b97c091512ce170556497f593e3a40e2 Mon Sep 17 00:00:00 2001
+Message-Id: <fcfd7a32b97c091512ce170556497f593e3a40e2@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:54 +0200
+Subject: [PATCH] tests: Add capabilities data for QEMU 2.11 x86_64
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We were missing these for x86_64 arch, so this is just for completeness.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit fa39de4f866dfb4adfa30e807eacfc1e618ad7d5)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ .../caps_2.11.0.x86_64.replies                | 19416 ++++++++++++++++
+ .../caps_2.11.0.x86_64.xml                    |   961 +
+ tests/qemucapabilitiestest.c                  |     1 +
+ 3 files changed, 20378 insertions(+)
+ create mode 100644 tests/qemucapabilitiesdata/caps_2.11.0.x86_64.replies
+ create mode 100644 tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
+
+diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.replies
+new file mode 100644
+index 0000000000..bfa7adc988
+--- /dev/null
++++ b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.replies
+@@ -0,0 +1,19416 @@
++{
++  "execute": "qmp_capabilities",
++  "id": "libvirt-1"
++}
++
++{
++  "return": {
++  },
++  "id": "libvirt-1"
++}
++
++{
++  "execute": "query-version",
++  "id": "libvirt-2"
++}
++
++{
++  "return": {
++    "qemu": {
++      "micro": 0,
++      "minor": 11,
++      "major": 2
++    },
++    "package": " (v2.11.0)"
++  },
++  "id": "libvirt-2"
++}
++
++{
++  "execute": "query-target",
++  "id": "libvirt-3"
++}
++
++{
++  "return": {
++    "arch": "x86_64"
++  },
++  "id": "libvirt-3"
++}
++
++{
++  "execute": "query-commands",
++  "id": "libvirt-4"
++}
++
++{
++  "return": [
++    {
++      "name": "netdev_add"
++    },
++    {
++      "name": "device_add"
++    },
++    {
++      "name": "query-qmp-schema"
++    },
++    {
++      "name": "xen-set-replication"
++    },
++    {
++      "name": "xen-set-global-dirty-log"
++    },
++    {
++      "name": "xen-save-devices-state"
++    },
++    {
++      "name": "xen-load-devices-state"
++    },
++    {
++      "name": "xen-colo-do-checkpoint"
++    },
++    {
++      "name": "x-debug-block-dirty-bitmap-sha256"
++    },
++    {
++      "name": "x-colo-lost-heartbeat"
++    },
++    {
++      "name": "x-blockdev-remove-medium"
++    },
++    {
++      "name": "x-blockdev-insert-medium"
++    },
++    {
++      "name": "x-blockdev-change"
++    },
++    {
++      "name": "watchdog-set-action"
++    },
++    {
++      "name": "transaction"
++    },
++    {
++      "name": "trace-event-set-state"
++    },
++    {
++      "name": "trace-event-get-state"
++    },
++    {
++      "name": "system_wakeup"
++    },
++    {
++      "name": "system_reset"
++    },
++    {
++      "name": "system_powerdown"
++    },
++    {
++      "name": "stop"
++    },
++    {
++      "name": "set_password"
++    },
++    {
++      "name": "set_link"
++    },
++    {
++      "name": "send-key"
++    },
++    {
++      "name": "screendump"
++    },
++    {
++      "name": "rtc-reset-reinjection"
++    },
++    {
++      "name": "ringbuf-write"
++    },
++    {
++      "name": "ringbuf-read"
++    },
++    {
++      "name": "remove-fd"
++    },
++    {
++      "name": "quit"
++    },
++    {
++      "name": "query-xen-replication-status"
++    },
++    {
++      "name": "query-vnc-servers"
++    },
++    {
++      "name": "query-vnc"
++    },
++    {
++      "name": "query-vm-generation-id"
++    },
++    {
++      "name": "query-version"
++    },
++    {
++      "name": "query-uuid"
++    },
++    {
++      "name": "query-tpm-types"
++    },
++    {
++      "name": "query-tpm-models"
++    },
++    {
++      "name": "query-tpm"
++    },
++    {
++      "name": "query-target"
++    },
++    {
++      "name": "query-status"
++    },
++    {
++      "name": "query-spice"
++    },
++    {
++      "name": "query-rx-filter"
++    },
++    {
++      "name": "query-rocker-ports"
++    },
++    {
++      "name": "query-rocker-of-dpa-groups"
++    },
++    {
++      "name": "query-rocker-of-dpa-flows"
++    },
++    {
++      "name": "query-rocker"
++    },
++    {
++      "name": "query-pci"
++    },
++    {
++      "name": "query-named-block-nodes"
++    },
++    {
++      "name": "query-name"
++    },
++    {
++      "name": "query-migrate-parameters"
++    },
++    {
++      "name": "query-migrate-capabilities"
++    },
++    {
++      "name": "query-migrate-cache-size"
++    },
++    {
++      "name": "query-migrate"
++    },
++    {
++      "name": "query-mice"
++    },
++    {
++      "name": "query-memory-size-summary"
++    },
++    {
++      "name": "query-memory-devices"
++    },
++    {
++      "name": "query-memdev"
++    },
++    {
++      "name": "query-machines"
++    },
++    {
++      "name": "query-kvm"
++    },
++    {
++      "name": "query-iothreads"
++    },
++    {
++      "name": "query-hotpluggable-cpus"
++    },
++    {
++      "name": "query-fdsets"
++    },
++    {
++      "name": "query-events"
++    },
++    {
++      "name": "query-dump-guest-memory-capability"
++    },
++    {
++      "name": "query-dump"
++    },
++    {
++      "name": "query-cpus"
++    },
++    {
++      "name": "query-cpu-model-expansion"
++    },
++    {
++      "name": "query-cpu-definitions"
++    },
++    {
++      "name": "query-commands"
++    },
++    {
++      "name": "query-command-line-options"
++    },
++    {
++      "name": "query-chardev-backends"
++    },
++    {
++      "name": "query-chardev"
++    },
++    {
++      "name": "query-blockstats"
++    },
++    {
++      "name": "query-block-jobs"
++    },
++    {
++      "name": "query-block"
++    },
++    {
++      "name": "query-balloon"
++    },
++    {
++      "name": "query-acpi-ospm-status"
++    },
++    {
++      "name": "qom-set"
++    },
++    {
++      "name": "qom-list-types"
++    },
++    {
++      "name": "qom-list"
++    },
++    {
++      "name": "qom-get"
++    },
++    {
++      "name": "qmp_capabilities"
++    },
++    {
++      "name": "pmemsave"
++    },
++    {
++      "name": "object-del"
++    },
++    {
++      "name": "object-add"
++    },
++    {
++      "name": "netdev_del"
++    },
++    {
++      "name": "nbd-server-stop"
++    },
++    {
++      "name": "nbd-server-start"
++    },
++    {
++      "name": "nbd-server-add"
++    },
++    {
++      "name": "migrate_set_speed"
++    },
++    {
++      "name": "migrate_set_downtime"
++    },
++    {
++      "name": "migrate_cancel"
++    },
++    {
++      "name": "migrate-start-postcopy"
++    },
++    {
++      "name": "migrate-set-parameters"
++    },
++    {
++      "name": "migrate-set-capabilities"
++    },
++    {
++      "name": "migrate-set-cache-size"
++    },
++    {
++      "name": "migrate-incoming"
++    },
++    {
++      "name": "migrate-continue"
++    },
++    {
++      "name": "migrate"
++    },
++    {
++      "name": "memsave"
++    },
++    {
++      "name": "input-send-event"
++    },
++    {
++      "name": "inject-nmi"
++    },
++    {
++      "name": "human-monitor-command"
++    },
++    {
++      "name": "getfd"
++    },
++    {
++      "name": "expire_password"
++    },
++    {
++      "name": "eject"
++    },
++    {
++      "name": "dump-guest-memory"
++    },
++    {
++      "name": "drive-mirror"
++    },
++    {
++      "name": "drive-backup"
++    },
++    {
++      "name": "device_del"
++    },
++    {
++      "name": "device-list-properties"
++    },
++    {
++      "name": "cpu-add"
++    },
++    {
++      "name": "cpu"
++    },
++    {
++      "name": "cont"
++    },
++    {
++      "name": "closefd"
++    },
++    {
++      "name": "client_migrate_info"
++    },
++    {
++      "name": "chardev-send-break"
++    },
++    {
++      "name": "chardev-remove"
++    },
++    {
++      "name": "chardev-change"
++    },
++    {
++      "name": "chardev-add"
++    },
++    {
++      "name": "change-vnc-password"
++    },
++    {
++      "name": "change-backing-file"
++    },
++    {
++      "name": "change"
++    },
++    {
++      "name": "blockdev-snapshot-sync"
++    },
++    {
++      "name": "blockdev-snapshot-internal-sync"
++    },
++    {
++      "name": "blockdev-snapshot-delete-internal-sync"
++    },
++    {
++      "name": "blockdev-snapshot"
++    },
++    {
++      "name": "blockdev-open-tray"
++    },
++    {
++      "name": "blockdev-mirror"
++    },
++    {
++      "name": "blockdev-del"
++    },
++    {
++      "name": "blockdev-close-tray"
++    },
++    {
++      "name": "blockdev-change-medium"
++    },
++    {
++      "name": "blockdev-backup"
++    },
++    {
++      "name": "blockdev-add"
++    },
++    {
++      "name": "block_set_io_throttle"
++    },
++    {
++      "name": "block_resize"
++    },
++    {
++      "name": "block_passwd"
++    },
++    {
++      "name": "block-stream"
++    },
++    {
++      "name": "block-set-write-threshold"
++    },
++    {
++      "name": "block-job-set-speed"
++    },
++    {
++      "name": "block-job-resume"
++    },
++    {
++      "name": "block-job-pause"
++    },
++    {
++      "name": "block-job-complete"
++    },
++    {
++      "name": "block-job-cancel"
++    },
++    {
++      "name": "block-dirty-bitmap-remove"
++    },
++    {
++      "name": "block-dirty-bitmap-clear"
++    },
++    {
++      "name": "block-dirty-bitmap-add"
++    },
++    {
++      "name": "block-commit"
++    },
++    {
++      "name": "balloon"
++    },
++    {
++      "name": "add_client"
++    },
++    {
++      "name": "add-fd"
++    }
++  ],
++  "id": "libvirt-4"
++}
++
++{
++  "execute": "add-fd",
++  "arguments": {
++    "fdset-id": 0,
++    "opaque": "/dev/null"
++  },
++  "id": "libvirt-5"
++}
++
++{
++  "return": {
++    "fd": 15,
++    "fdset-id": 0
++  },
++  "id": "libvirt-5"
++}
++
++{
++  "execute": "block-commit",
++  "arguments": {
++    "device": "bogus"
++  },
++  "id": "libvirt-6"
++}
++
++{
++  "id": "libvirt-6",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'bogus' not found"
++  }
++}
++
++{
++  "execute": "query-kvm",
++  "id": "libvirt-7"
++}
++
++{
++  "return": {
++    "enabled": true,
++    "present": true
++  },
++  "id": "libvirt-7"
++}
++
++{
++  "execute": "query-events",
++  "id": "libvirt-8"
++}
++
++{
++  "return": [
++    {
++      "name": "WATCHDOG"
++    },
++    {
++      "name": "WAKEUP"
++    },
++    {
++      "name": "VSERPORT_CHANGE"
++    },
++    {
++      "name": "VNC_INITIALIZED"
++    },
++    {
++      "name": "VNC_DISCONNECTED"
++    },
++    {
++      "name": "VNC_CONNECTED"
++    },
++    {
++      "name": "SUSPEND_DISK"
++    },
++    {
++      "name": "SUSPEND"
++    },
++    {
++      "name": "STOP"
++    },
++    {
++      "name": "SPICE_MIGRATE_COMPLETED"
++    },
++    {
++      "name": "SPICE_INITIALIZED"
++    },
++    {
++      "name": "SPICE_DISCONNECTED"
++    },
++    {
++      "name": "SPICE_CONNECTED"
++    },
++    {
++      "name": "SHUTDOWN"
++    },
++    {
++      "name": "RTC_CHANGE"
++    },
++    {
++      "name": "RESUME"
++    },
++    {
++      "name": "RESET"
++    },
++    {
++      "name": "QUORUM_REPORT_BAD"
++    },
++    {
++      "name": "QUORUM_FAILURE"
++    },
++    {
++      "name": "POWERDOWN"
++    },
++    {
++      "name": "NIC_RX_FILTER_CHANGED"
++    },
++    {
++      "name": "MIGRATION_PASS"
++    },
++    {
++      "name": "MIGRATION"
++    },
++    {
++      "name": "MEM_UNPLUG_ERROR"
++    },
++    {
++      "name": "GUEST_PANICKED"
++    },
++    {
++      "name": "DUMP_COMPLETED"
++    },
++    {
++      "name": "DEVICE_TRAY_MOVED"
++    },
++    {
++      "name": "DEVICE_DELETED"
++    },
++    {
++      "name": "BLOCK_WRITE_THRESHOLD"
++    },
++    {
++      "name": "BLOCK_JOB_READY"
++    },
++    {
++      "name": "BLOCK_JOB_ERROR"
++    },
++    {
++      "name": "BLOCK_JOB_COMPLETED"
++    },
++    {
++      "name": "BLOCK_JOB_CANCELLED"
++    },
++    {
++      "name": "BLOCK_IO_ERROR"
++    },
++    {
++      "name": "BLOCK_IMAGE_CORRUPTED"
++    },
++    {
++      "name": "BALLOON_CHANGE"
++    },
++    {
++      "name": "ACPI_DEVICE_OST"
++    }
++  ],
++  "id": "libvirt-8"
++}
++
++{
++  "execute": "qom-list-types",
++  "id": "libvirt-9"
++}
++
++{
++  "return": [
++    {
++      "name": "vhost-vsock-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "pc-q35-2.10-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "generic-sdhci",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "pc-0.13-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "cfi.pflash01",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "i82551",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82550",
++      "parent": "pci-device"
++    },
++    {
++      "name": "Westmere-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pci-serial-4x",
++      "parent": "pci-device"
++    },
++    {
++      "name": "cryptodev-backend",
++      "parent": "object"
++    },
++    {
++      "name": "Penryn-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "Haswell-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "iothread",
++      "parent": "object"
++    },
++    {
++      "name": "pc-q35-2.11-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "pc-i440fx-2.9-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "Skylake-Client-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "virtio-gpu-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "Opteron_G3-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "floppy-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "e1000e",
++      "parent": "pci-device"
++    },
++    {
++      "name": "Broadwell-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "piix3-ide",
++      "parent": "pci-ide"
++    },
++    {
++      "name": "secret",
++      "parent": "object"
++    },
++    {
++      "name": "amd-iommu-iommu-memory-region",
++      "parent": "qemu:iommu-memory-region"
++    },
++    {
++      "name": "base-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "isa-parallel",
++      "parent": "isa-device"
++    },
++    {
++      "name": "megasas",
++      "parent": "megasas-base"
++    },
++    {
++      "name": "i2c-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "pc-q35-2.4-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "vhost-vsock-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "usb-braille",
++      "parent": "usb-serial-dev"
++    },
++    {
++      "name": "mptsas1068",
++      "parent": "pci-device"
++    },
++    {
++      "name": "chardev-udp",
++      "parent": "chardev"
++    },
++    {
++      "name": "vmware-svga",
++      "parent": "pci-device"
++    },
++    {
++      "name": "qio-channel-tls",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "chardev-file",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "filter-buffer",
++      "parent": "netfilter"
++    },
++    {
++      "name": "PIIX3-xen",
++      "parent": "pci-piix3"
++    },
++    {
++      "name": "ccid-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "scsi-cd",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "pc-i440fx-2.0-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "isa-serial",
++      "parent": "isa-device"
++    },
++    {
++      "name": "usb-ehci",
++      "parent": "pci-ehci-usb"
++    },
++    {
++      "name": "container",
++      "parent": "object"
++    },
++    {
++      "name": "qio-channel-rdma",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "chardev-null",
++      "parent": "chardev"
++    },
++    {
++      "name": "host-x86_64-cpu",
++      "parent": "max-x86_64-cpu"
++    },
++    {
++      "name": "qemu64-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pci-serial-2x",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtio-mouse-pci",
++      "parent": "virtio-input-hid-pci"
++    },
++    {
++      "name": "piix4-ide",
++      "parent": "pci-ide"
++    },
++    {
++      "name": "scsi-generic",
++      "parent": "scsi-device"
++    },
++    {
++      "name": "isa-ipmi-bt",
++      "parent": "isa-device"
++    },
++    {
++      "name": "pc-1.0-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "virtio-net-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "hyperv-testdev",
++      "parent": "isa-device"
++    },
++    {
++      "name": "pc-dimm",
++      "parent": "device"
++    },
++    {
++      "name": "pc-q35-2.8-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "Haswell-noTSX-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pc-i440fx-2.1-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "ich9-usb-ehci1",
++      "parent": "pci-ehci-usb"
++    },
++    {
++      "name": "virtio-mouse-device",
++      "parent": "virtio-input-hid-device"
++    },
++    {
++      "name": "isa-debugcon",
++      "parent": "isa-device"
++    },
++    {
++      "name": "throttle-group",
++      "parent": "object"
++    },
++    {
++      "name": "intel-iommu-iommu-memory-region",
++      "parent": "qemu:iommu-memory-region"
++    },
++    {
++      "name": "AMDVI-PCI",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ide-hd",
++      "parent": "ide-device"
++    },
++    {
++      "name": "virtio-vga",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "rng-egd",
++      "parent": "rng-backend"
++    },
++    {
++      "name": "isa-pcspk",
++      "parent": "isa-device"
++    },
++    {
++      "name": "isa-pit",
++      "parent": "pit-common"
++    },
++    {
++      "name": "pc-1.1-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "ich9-usb-ehci2",
++      "parent": "pci-ehci-usb"
++    },
++    {
++      "name": "pxb-host",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "pc-q35-2.9-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "intel-iommu",
++      "parent": "x86-iommu"
++    },
++    {
++      "name": "irq",
++      "parent": "object"
++    },
++    {
++      "name": "chardev-vc",
++      "parent": "chardev"
++    },
++    {
++      "name": "ipmi-bmc-sim",
++      "parent": "ipmi-bmc"
++    },
++    {
++      "name": "cirrus-vga",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtconsole",
++      "parent": "virtserialport"
++    },
++    {
++      "name": "chardev-socket",
++      "parent": "chardev"
++    },
++    {
++      "name": "virtio-rng-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "PCIE",
++      "parent": "PCI"
++    },
++    {
++      "name": "qio-channel-buffer",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "chardev-pty",
++      "parent": "chardev"
++    },
++    {
++      "name": "pentium3-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "qxl-vga",
++      "parent": "pci-qxl"
++    },
++    {
++      "name": "qio-dns-resolver",
++      "parent": "object"
++    },
++    {
++      "name": "ioapic",
++      "parent": "ioapic-common"
++    },
++    {
++      "name": "kvm-pit",
++      "parent": "pit-common"
++    },
++    {
++      "name": "chardev-memory",
++      "parent": "chardev-ringbuf"
++    },
++    {
++      "name": "pc-i440fx-2.5-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "filter-rewriter",
++      "parent": "netfilter"
++    },
++    {
++      "name": "pcie-root-port",
++      "parent": "pcie-root-port-base"
++    },
++    {
++      "name": "chardev-serial",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "vhost-scsi-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "usb-host",
++      "parent": "usb-device"
++    },
++    {
++      "name": "usb-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "Skylake-Server-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pc-i440fx-1.4-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "usb-kbd",
++      "parent": "usb-hid"
++    },
++    {
++      "name": "486-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "ES1370",
++      "parent": "pci-device"
++    },
++    {
++      "name": "gus",
++      "parent": "isa-device"
++    },
++    {
++      "name": "input-linux",
++      "parent": "object"
++    },
++    {
++      "name": "PIIX3",
++      "parent": "pci-piix3"
++    },
++    {
++      "name": "isa-applesmc",
++      "parent": "isa-device"
++    },
++    {
++      "name": "pc-i440fx-2.6-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "migration",
++      "parent": "device"
++    },
++    {
++      "name": "i82559er",
++      "parent": "pci-device"
++    },
++    {
++      "name": "q35-pcihost",
++      "parent": "pcie-host-bridge"
++    },
++    {
++      "name": "usb-bt-dongle",
++      "parent": "usb-device"
++    },
++    {
++      "name": "e1000-82545em",
++      "parent": "e1000-base"
++    },
++    {
++      "name": "e1000-82544gc",
++      "parent": "e1000-base"
++    },
++    {
++      "name": "i6300esb",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pc-i440fx-1.5-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "or-irq",
++      "parent": "device"
++    },
++    {
++      "name": "pc-0.14-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "mc146818rtc",
++      "parent": "isa-device"
++    },
++    {
++      "name": "AC97",
++      "parent": "pci-device"
++    },
++    {
++      "name": "PIIX4_PM",
++      "parent": "pci-device"
++    },
++    {
++      "name": "piix4-usb-uhci",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "sysbus-ahci",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "virtio-tablet-device",
++      "parent": "virtio-input-hid-device"
++    },
++    {
++      "name": "filter-redirector",
++      "parent": "netfilter"
++    },
++    {
++      "name": "kvm-ioapic",
++      "parent": "ioapic-common"
++    },
++    {
++      "name": "chardev-pipe",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "unimplemented-device",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "pvpanic",
++      "parent": "isa-device"
++    },
++    {
++      "name": "core2duo-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "qio-channel-command",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "tls-creds-x509",
++      "parent": "tls-creds"
++    },
++    {
++      "name": "virtio-9p-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "scsi-disk",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "vfio-pci-igd-lpc-bridge",
++      "parent": "pci-device"
++    },
++    {
++      "name": "sb16",
++      "parent": "isa-device"
++    },
++    {
++      "name": "virtio-serial-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "qemu-console",
++      "parent": "object"
++    },
++    {
++      "name": "pc-0.15-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "chardev-ringbuf",
++      "parent": "chardev"
++    },
++    {
++      "name": "virtio-blk-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "usb-mouse",
++      "parent": "usb-hid"
++    },
++    {
++      "name": "filter-dump",
++      "parent": "netfilter"
++    },
++    {
++      "name": "virtio-keyboard-pci",
++      "parent": "virtio-input-hid-pci"
++    },
++    {
++      "name": "chardev-stdio",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "piix3-usb-uhci",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "virtio-scsi-device",
++      "parent": "virtio-scsi-common"
++    },
++    {
++      "name": "virtio-9p-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "hda-output",
++      "parent": "hda-audio"
++    },
++    {
++      "name": "pc-q35-2.5-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "SUNW,fdtwo",
++      "parent": "base-sysbus-fdc"
++    },
++    {
++      "name": "tpci200",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i8257",
++      "parent": "isa-device"
++    },
++    {
++      "name": "filter-mirror",
++      "parent": "netfilter"
++    },
++    {
++      "name": "Opteron_G4-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "vhost-user-scsi",
++      "parent": "vhost-scsi-common"
++    },
++    {
++      "name": "virtio-mmio",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "isa-i8259",
++      "parent": "pic-common"
++    },
++    {
++      "name": "System",
++      "parent": "bus"
++    },
++    {
++      "name": "pvscsi",
++      "parent": "pci-device"
++    },
++    {
++      "name": "amd-iommu",
++      "parent": "x86-iommu"
++    },
++    {
++      "name": "virtio-net-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "colo-compare",
++      "parent": "object"
++    },
++    {
++      "name": "sd-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "vmcoreinfo",
++      "parent": "device"
++    },
++    {
++      "name": "qio-channel-file",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "usb-hub",
++      "parent": "usb-device"
++    },
++    {
++      "name": "chardev-testdev",
++      "parent": "chardev"
++    },
++    {
++      "name": "IvyBridge-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "hda-duplex",
++      "parent": "hda-audio"
++    },
++    {
++      "name": "igd-passthrough-i440FX",
++      "parent": "i440FX"
++    },
++    {
++      "name": "ccid-card-passthru",
++      "parent": "ccid-card"
++    },
++    {
++      "name": "chardev-hci",
++      "parent": "chardev"
++    },
++    {
++      "name": "igd-passthrough-isa-bridge",
++      "parent": "pci-device"
++    },
++    {
++      "name": "rocker",
++      "parent": "pci-device"
++    },
++    {
++      "name": "nec-usb-xhci",
++      "parent": "base-xhci"
++    },
++    {
++      "name": "megasas-gen2",
++      "parent": "megasas-base"
++    },
++    {
++      "name": "pci-ohci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ib700",
++      "parent": "isa-device"
++    },
++    {
++      "name": "xio3130-downstream",
++      "parent": "pcie-slot"
++    },
++    {
++      "name": "chardev-mux",
++      "parent": "chardev"
++    },
++    {
++      "name": "isapc-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "ipoctal232",
++      "parent": "ipack-device"
++    },
++    {
++      "name": "ide-cd",
++      "parent": "ide-device"
++    },
++    {
++      "name": "tls-creds-anon",
++      "parent": "tls-creds"
++    },
++    {
++      "name": "pc-i440fx-2.2-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "isabus-bridge",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "isa-ipmi-kcs",
++      "parent": "isa-device"
++    },
++    {
++      "name": "memory-backend-file",
++      "parent": "memory-backend"
++    },
++    {
++      "name": "virtio-crypto-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "qemu:memory-region",
++      "parent": "object"
++    },
++    {
++      "name": "isa-vga",
++      "parent": "isa-device"
++    },
++    {
++      "name": "isa-ide",
++      "parent": "isa-device"
++    },
++    {
++      "name": "virtio-keyboard-device",
++      "parent": "virtio-input-hid-device"
++    },
++    {
++      "name": "ipmi-bmc-extern",
++      "parent": "ipmi-bmc"
++    },
++    {
++      "name": "rng-random",
++      "parent": "rng-backend"
++    },
++    {
++      "name": "kvm-i8259",
++      "parent": "pic-common"
++    },
++    {
++      "name": "i440FX-pcihost",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "sga",
++      "parent": "isa-device"
++    },
++    {
++      "name": "tpm-tis",
++      "parent": "isa-device"
++    },
++    {
++      "name": "tpm-passthrough",
++      "parent": "tpm-backend"
++    },
++    {
++      "name": "pc-1.2-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "isa-debug-exit",
++      "parent": "isa-device"
++    },
++    {
++      "name": "filter-replay",
++      "parent": "netfilter"
++    },
++    {
++      "name": "pc-testdev",
++      "parent": "isa-device"
++    },
++    {
++      "name": "Opteron_G1-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pc-0.10-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "pc-i440fx-2.3-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "qemu32-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pcnet",
++      "parent": "pci-device"
++    },
++    {
++      "name": "apic",
++      "parent": "apic-common"
++    },
++    {
++      "name": "ivshmem",
++      "parent": "ivshmem-common"
++    },
++    {
++      "name": "hpet",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "adlib",
++      "parent": "isa-device"
++    },
++    {
++      "name": "chardev-gdb",
++      "parent": "chardev"
++    },
++    {
++      "name": "virtio-pci-bus",
++      "parent": "virtio-bus"
++    },
++    {
++      "name": "vhost-user-scsi-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "lsi53c895a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "usb-audio",
++      "parent": "usb-device"
++    },
++    {
++      "name": "pr-manager-helper",
++      "parent": "pr-manager"
++    },
++    {
++      "name": "usb-tablet",
++      "parent": "usb-hid"
++    },
++    {
++      "name": "pxb-bus",
++      "parent": "PCI"
++    },
++    {
++      "name": "dc390",
++      "parent": "am53c974"
++    },
++    {
++      "name": "usb-wacom-tablet",
++      "parent": "usb-device"
++    },
++    {
++      "name": "virtio-mmio-bus",
++      "parent": "virtio-bus"
++    },
++    {
++      "name": "pc-0.11-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "kvm-apic",
++      "parent": "apic-common"
++    },
++    {
++      "name": "phenom-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "usb-ccid",
++      "parent": "usb-device"
++    },
++    {
++      "name": "fw_cfg_io",
++      "parent": "fw_cfg"
++    },
++    {
++      "name": "usb-net",
++      "parent": "usb-device"
++    },
++    {
++      "name": "ioh3420",
++      "parent": "pcie-root-port-base"
++    },
++    {
++      "name": "virtio-crypto-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "cs4231a",
++      "parent": "isa-device"
++    },
++    {
++      "name": "chardev-braille",
++      "parent": "chardev"
++    },
++    {
++      "name": "nvme",
++      "parent": "pci-device"
++    },
++    {
++      "name": "chardev-wctablet",
++      "parent": "chardev"
++    },
++    {
++      "name": "i82801b11-bridge",
++      "parent": "base-pci-bridge"
++    },
++    {
++      "name": "kvmvapic",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "sdhci-bus",
++      "parent": "sd-bus"
++    },
++    {
++      "name": "pc-i440fx-2.10-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "edu",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pci-bridge-seat",
++      "parent": "pci-bridge"
++    },
++    {
++      "name": "mch",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pc-i440fx-2.7-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "vhost-scsi",
++      "parent": "vhost-scsi-common"
++    },
++    {
++      "name": "virtio-balloon-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "tcg-accel",
++      "parent": "accel"
++    },
++    {
++      "name": "mmio_interface",
++      "parent": "device"
++    },
++    {
++      "name": "usb-bot",
++      "parent": "usb-storage-dev"
++    },
++    {
++      "name": "isa-cirrus-vga",
++      "parent": "isa-device"
++    },
++    {
++      "name": "esp",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "ICH9-LPC",
++      "parent": "pci-device"
++    },
++    {
++      "name": "accel",
++      "parent": "object"
++    },
++    {
++      "name": "pc-i440fx-2.11-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "pxb-pcie-bus",
++      "parent": "PCIE"
++    },
++    {
++      "name": "pc-i440fx-1.6-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "lsi53c810",
++      "parent": "lsi53c895a"
++    },
++    {
++      "name": "kvmclock",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "loader",
++      "parent": "device"
++    },
++    {
++      "name": "ich9-usb-uhci6",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "pc-i440fx-2.8-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "ich9-usb-uhci4",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "virtio-serial-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "nvdimm",
++      "parent": "pc-dimm"
++    },
++    {
++      "name": "tpm-emulator",
++      "parent": "tpm-backend"
++    },
++    {
++      "name": "SandyBridge-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "chardev-spiceport",
++      "parent": "chardev-spice"
++    },
++    {
++      "name": "virtio-balloon-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "qxl",
++      "parent": "pci-qxl"
++    },
++    {
++      "name": "chardev-spicevmc",
++      "parent": "chardev-spice"
++    },
++    {
++      "name": "intel-hda",
++      "parent": "intel-hda-generic"
++    },
++    {
++      "name": "pc-i440fx-1.7-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "max-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "virtio-serial-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "ich9-usb-uhci3",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "ICH9 SMB",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ich9-usb-uhci5",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "pxb-pcie",
++      "parent": "pci-device"
++    },
++    {
++      "name": "piix3-ide-xen",
++      "parent": "pci-ide"
++    },
++    {
++      "name": "virtio-input-host-device",
++      "parent": "virtio-input-device"
++    },
++    {
++      "name": "vmxnet3",
++      "parent": "pci-device"
++    },
++    {
++      "name": "IDE",
++      "parent": "bus"
++    },
++    {
++      "name": "VGA",
++      "parent": "pci-vga"
++    },
++    {
++      "name": "pci-testdev",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ich9-usb-uhci2",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "ich9-usb-uhci1",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "x3130-upstream",
++      "parent": "pcie-port"
++    },
++    {
++      "name": "SCSI",
++      "parent": "bus"
++    },
++    {
++      "name": "none-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "pci-bridge",
++      "parent": "base-pci-bridge"
++    },
++    {
++      "name": "sysbus-fdc",
++      "parent": "base-sysbus-fdc"
++    },
++    {
++      "name": "n270-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pci-serial",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pc-q35-2.6-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "athlon-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "virtio-rng-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "ccid-card-emulated",
++      "parent": "ccid-card"
++    },
++    {
++      "name": "ISA",
++      "parent": "bus"
++    },
++    {
++      "name": "i8042",
++      "parent": "isa-device"
++    },
++    {
++      "name": "kvm-accel",
++      "parent": "accel"
++    },
++    {
++      "name": "i82559c",
++      "parent": "pci-device"
++    },
++    {
++      "name": "floppy",
++      "parent": "device"
++    },
++    {
++      "name": "i82559b",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82559a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "scsi-hd",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "qtest-accel",
++      "parent": "accel"
++    },
++    {
++      "name": "virtio-scsi-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "hda-micro",
++      "parent": "hda-audio"
++    },
++    {
++      "name": "scsi-block",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "rtl8139",
++      "parent": "pci-device"
++    },
++    {
++      "name": "vmmouse",
++      "parent": "isa-device"
++    },
++    {
++      "name": "ich9-intel-hda",
++      "parent": "intel-hda-generic"
++    },
++    {
++      "name": "pc-q35-2.7-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "usb-mtp",
++      "parent": "usb-device"
++    },
++    {
++      "name": "ide-drive",
++      "parent": "ide-device"
++    },
++    {
++      "name": "qio-channel-websock",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "fw_cfg_mem",
++      "parent": "fw_cfg"
++    },
++    {
++      "name": "PCI",
++      "parent": "bus"
++    },
++    {
++      "name": "Opteron_G5-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "vmport",
++      "parent": "isa-device"
++    },
++    {
++      "name": "coreduo-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "usb-redir",
++      "parent": "usb-device"
++    },
++    {
++      "name": "usb-storage",
++      "parent": "usb-storage-dev"
++    },
++    {
++      "name": "am53c974",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtio-input-host-pci",
++      "parent": "virtio-input-pci"
++    },
++    {
++      "name": "pentium2-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "i82558b",
++      "parent": "pci-device"
++    },
++    {
++      "name": "cryptodev-backend-builtin",
++      "parent": "cryptodev-backend"
++    },
++    {
++      "name": "i82558a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "qemu,register",
++      "parent": "device"
++    },
++    {
++      "name": "ne2k_isa",
++      "parent": "isa-device"
++    },
++    {
++      "name": "sdhci-pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "chardev-parallel",
++      "parent": "chardev"
++    },
++    {
++      "name": "qemu-xhci",
++      "parent": "base-xhci"
++    },
++    {
++      "name": "pxb",
++      "parent": "pci-device"
++    },
++    {
++      "name": "port92",
++      "parent": "isa-device"
++    },
++    {
++      "name": "e1000",
++      "parent": "e1000-base"
++    },
++    {
++      "name": "Conroe-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "kvm64-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "i82801",
++      "parent": "pci-device"
++    },
++    {
++      "name": "vt82c686b-usb-uhci",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "HDA",
++      "parent": "bus"
++    },
++    {
++      "name": "vmgenid",
++      "parent": "device"
++    },
++    {
++      "name": "pc-1.3-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "usb-serial",
++      "parent": "usb-serial-dev"
++    },
++    {
++      "name": "pc-i440fx-2.4-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "sysbus-ohci",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "chardev-msmouse",
++      "parent": "chardev"
++    },
++    {
++      "name": "EPYC-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "i82557b",
++      "parent": "pci-device"
++    },
++    {
++      "name": "usb-uas",
++      "parent": "usb-device"
++    },
++    {
++      "name": "Broadwell-noTSX-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "i82557c",
++      "parent": "pci-device"
++    },
++    {
++      "name": "Nehalem-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "memory-backend-ram",
++      "parent": "memory-backend"
++    },
++    {
++      "name": "i82557a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtserialport",
++      "parent": "virtio-serial-port"
++    },
++    {
++      "name": "i440FX",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ne2k_pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "smbus-eeprom",
++      "parent": "smbus-device"
++    },
++    {
++      "name": "i82562",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ich9-ahci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "isa-fdc",
++      "parent": "isa-device"
++    },
++    {
++      "name": "sd-card",
++      "parent": "device"
++    },
++    {
++      "name": "pc-0.12-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "kvm32-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "Opteron_G2-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "vfio-pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "IndustryPack",
++      "parent": "bus"
++    },
++    {
++      "name": "virtio-gpu-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "ivshmem-plain",
++      "parent": "ivshmem-common"
++    },
++    {
++      "name": "secondary-vga",
++      "parent": "pci-vga"
++    },
++    {
++      "name": "qio-channel-socket",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "ivshmem-doorbell",
++      "parent": "ivshmem-common"
++    },
++    {
++      "name": "pcie-pci-bridge",
++      "parent": "base-pci-bridge"
++    },
++    {
++      "name": "pentium-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "virtio-blk-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "virtio-tablet-pci",
++      "parent": "virtio-input-hid-pci"
++    }
++  ],
++  "id": "libvirt-9"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-blk-pci"
++  },
++  "id": "libvirt-10"
++}
++
++{
++  "return": [
++    {
++      "name": "secs",
++      "type": "uint32"
++    },
++    {
++      "name": "request-merging",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "heads",
++      "type": "uint32"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "scsi",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "cyls",
++      "type": "uint32"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iothread",
++      "type": "link<iothread>"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "config-wce",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "class",
++      "type": "uint32"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-blk-device>"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "num-queues",
++      "type": "uint16"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-10"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-net-pci"
++  },
++  "id": "libvirt-11"
++}
++
++{
++  "return": [
++    {
++      "name": "ctrl_mac_addr",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "status",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_csum",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ctrl_rx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ctrl_vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "mrg_rxbuf",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_tso6",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-txtimer",
++      "type": "uint32"
++    },
++    {
++      "name": "host_tso4",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "ctrl_rx_extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "gso",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "vlan",
++      "description": "Integer VLAN id to connect to",
++      "type": "int32"
++    },
++    {
++      "name": "x-txburst",
++      "type": "int32"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_mtu",
++      "type": "uint16"
++    },
++    {
++      "name": "ctrl_vlan",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-net-device>"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "guest_announce",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_ecn",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_ufo",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_tso4",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_tso6",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ctrl_guest_offloads",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "csum",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "mq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_ecn",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_ufo",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "mac",
++      "description": "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
++      "type": "str"
++    },
++    {
++      "name": "tx_queue_size",
++      "type": "uint16"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "tx",
++      "type": "str"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-mtu-bypass-backend",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "netdev",
++      "description": "ID of a netdev to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rx_queue_size",
++      "type": "uint16"
++    }
++  ],
++  "id": "libvirt-11"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-scsi-pci"
++  },
++  "id": "libvirt-12"
++}
++
++{
++  "return": [
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "virtqueue_size",
++      "type": "uint32"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "cmd_per_lun",
++      "type": "uint32"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "num_queues",
++      "type": "uint32"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "hotplug",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "max_sectors",
++      "type": "uint32"
++    },
++    {
++      "name": "param_change",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iothread",
++      "type": "link<iothread>"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-scsi-device>"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-12"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-net-ccw"
++  },
++  "id": "libvirt-13"
++}
++
++{
++  "id": "libvirt-13",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-net-ccw' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-scsi-ccw"
++  },
++  "id": "libvirt-14"
++}
++
++{
++  "id": "libvirt-14",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-scsi-ccw' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-net-s390"
++  },
++  "id": "libvirt-15"
++}
++
++{
++  "id": "libvirt-15",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-net-s390' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "pci-assign"
++  },
++  "id": "libvirt-16"
++}
++
++{
++  "id": "libvirt-16",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'pci-assign' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "kvm-pci-assign"
++  },
++  "id": "libvirt-17"
++}
++
++{
++  "id": "libvirt-17",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'kvm-pci-assign' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "vfio-pci"
++  },
++  "id": "libvirt-18"
++}
++
++{
++  "return": [
++    {
++      "name": "x-pci-sub-device-id",
++      "type": "uint32"
++    },
++    {
++      "name": "x-no-kvm-msi",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-igd-opregion",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-vga",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pci-vendor-id",
++      "type": "uint32"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-req",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-igd-gms",
++      "type": "uint32"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "x-no-kvm-intx",
++      "type": "bool"
++    },
++    {
++      "name": "x-pci-device-id",
++      "type": "uint32"
++    },
++    {
++      "name": "host",
++      "description": "Address (bus/device/function) of the host device, example: 04:10.0",
++      "type": "str"
++    },
++    {
++      "name": "x-no-kvm-msix",
++      "type": "bool"
++    },
++    {
++      "name": "x-intx-mmap-timeout-ms",
++      "type": "uint32"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "x-pci-sub-vendor-id",
++      "type": "uint32"
++    },
++    {
++      "name": "x-nv-gpudirect-clique",
++      "description": "NVIDIA GPUDirect Clique ID (0 - 15)",
++      "type": "uint4"
++    },
++    {
++      "name": "sysfsdev",
++      "type": "str"
++    },
++    {
++      "name": "x-no-mmap",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-18"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "scsi-disk"
++  },
++  "id": "libvirt-19"
++}
++
++{
++  "return": [
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "port_index",
++      "type": "uint16"
++    },
++    {
++      "name": "dpofua",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "lun",
++      "type": "uint32"
++    },
++    {
++      "name": "max_unmap_size",
++      "type": "uint64"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "port_wwn",
++      "type": "uint64"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "product",
++      "type": "str"
++    },
++    {
++      "name": "scsi-id",
++      "type": "uint32"
++    },
++    {
++      "name": "channel",
++      "type": "uint32"
++    },
++    {
++      "name": "vendor",
++      "type": "str"
++    },
++    {
++      "name": "wwn",
++      "type": "uint64"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "removable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "ver",
++      "type": "str"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "max_io_size",
++      "type": "uint64"
++    }
++  ],
++  "id": "libvirt-19"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "ide-drive"
++  },
++  "id": "libvirt-20"
++}
++
++{
++  "return": [
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "unit",
++      "type": "uint32"
++    },
++    {
++      "name": "wwn",
++      "type": "uint64"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "model",
++      "type": "str"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "ver",
++      "type": "str"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    }
++  ],
++  "id": "libvirt-20"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "PIIX4_PM"
++  },
++  "id": "libvirt-21"
++}
++
++{
++  "return": [
++    {
++      "name": "memory-hotplug-support",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "acpi-pci-hotplug-with-bridge-support",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "disable_s4",
++      "type": "uint8"
++    },
++    {
++      "name": "disable_s3",
++      "type": "uint8"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "s4_val",
++      "type": "uint8"
++    },
++    {
++      "name": "smb_io_base",
++      "type": "uint32"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    }
++  ],
++  "id": "libvirt-21"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "usb-redir"
++  },
++  "id": "libvirt-22"
++}
++
++{
++  "return": [
++    {
++      "name": "filter",
++      "type": "str"
++    },
++    {
++      "name": "msos-desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "port",
++      "type": "str"
++    },
++    {
++      "name": "debug",
++      "type": "uint8"
++    },
++    {
++      "name": "streams",
++      "type": "bool"
++    },
++    {
++      "name": "chardev",
++      "description": "ID of a chardev to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "full-path",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "attached",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-22"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "usb-host"
++  },
++  "id": "libvirt-23"
++}
++
++{
++  "return": [
++    {
++      "name": "isobufs",
++      "type": "uint32"
++    },
++    {
++      "name": "hostaddr",
++      "type": "uint32"
++    },
++    {
++      "name": "msos-desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "productid",
++      "type": "uint32"
++    },
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "isobsize",
++      "type": "uint32"
++    },
++    {
++      "name": "port",
++      "type": "str"
++    },
++    {
++      "name": "vendorid",
++      "type": "uint32"
++    },
++    {
++      "name": "pipeline",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "attached",
++      "type": "bool"
++    },
++    {
++      "name": "hostport",
++      "type": "str"
++    },
++    {
++      "name": "full-path",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "loglevel",
++      "type": "uint32"
++    },
++    {
++      "name": "hostbus",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-23"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "scsi-generic"
++  },
++  "id": "libvirt-24"
++}
++
++{
++  "return": [
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "lun",
++      "type": "uint32"
++    },
++    {
++      "name": "channel",
++      "type": "uint32"
++    },
++    {
++      "name": "scsi-id",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-24"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "i440FX-pcihost"
++  },
++  "id": "libvirt-25"
++}
++
++{
++  "return": [
++    {
++      "name": "short_root_bus",
++      "type": "uint32"
++    },
++    {
++      "name": "pci-conf-idx[0]",
++      "type": "child<qemu:memory-region>"
++    },
++    {
++      "name": "pci-hole64-end",
++      "type": "uint64"
++    },
++    {
++      "name": "pci-hole-end",
++      "type": "uint32"
++    },
++    {
++      "name": "pci-hole-start",
++      "type": "uint32"
++    },
++    {
++      "name": "pci-hole64-start",
++      "type": "uint64"
++    },
++    {
++      "name": "pci-hole64-size",
++      "type": "size"
++    },
++    {
++      "name": "pci-conf-data[0]",
++      "type": "child<qemu:memory-region>"
++    },
++    {
++      "name": "x-pci-hole64-fix",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-25"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "q35-pcihost"
++  },
++  "id": "libvirt-26"
++}
++
++{
++  "return": [
++    {
++      "name": "short_root_bus",
++      "type": "uint32"
++    },
++    {
++      "name": "system-mem",
++      "type": "link<qemu:memory-region>"
++    },
++    {
++      "name": "pci-conf-idx[0]",
++      "type": "child<qemu:memory-region>"
++    },
++    {
++      "name": "pcie-mmcfg-mmio[0]",
++      "type": "child<qemu:memory-region>"
++    },
++    {
++      "name": "pci-hole64-start",
++      "type": "uint64"
++    },
++    {
++      "name": "io-mem",
++      "type": "link<qemu:memory-region>"
++    },
++    {
++      "name": "pci-hole64-end",
++      "type": "uint64"
++    },
++    {
++      "name": "pci-hole-end",
++      "type": "uint32"
++    },
++    {
++      "name": "above-4g-mem-size",
++      "type": "size"
++    },
++    {
++      "name": "below-4g-mem-size",
++      "type": "size"
++    },
++    {
++      "name": "ram-mem",
++      "type": "link<qemu:memory-region>"
++    },
++    {
++      "name": "pci-hole-start",
++      "type": "uint32"
++    },
++    {
++      "name": "MCFG",
++      "type": "uint64"
++    },
++    {
++      "name": "mch",
++      "type": "child<mch>"
++    },
++    {
++      "name": "pci-hole64-size",
++      "type": "size"
++    },
++    {
++      "name": "pci-mem",
++      "type": "link<qemu:memory-region>"
++    },
++    {
++      "name": "pci-conf-data[0]",
++      "type": "child<qemu:memory-region>"
++    },
++    {
++      "name": "x-pci-hole64-fix",
++      "type": "bool"
++    },
++    {
++      "name": "mcfg_size",
++      "type": "uint64"
++    }
++  ],
++  "id": "libvirt-26"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "usb-storage"
++  },
++  "id": "libvirt-27"
++}
++
++{
++  "return": [
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "msos-desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "port",
++      "type": "str"
++    },
++    {
++      "name": "attached",
++      "type": "bool"
++    },
++    {
++      "name": "full-path",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "removable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    }
++  ],
++  "id": "libvirt-27"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "kvm-pit"
++  },
++  "id": "libvirt-28"
++}
++
++{
++  "return": [
++    {
++      "name": "iobase",
++      "type": "uint32"
++    },
++    {
++      "name": "lost_tick_policy",
++      "type": "LostTickPolicy"
++    }
++  ],
++  "id": "libvirt-28"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "VGA"
++  },
++  "id": "libvirt-29"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "mmio",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "qemu-extended-regs",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "big-endian-framebuffer",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "vgamem_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    }
++  ],
++  "id": "libvirt-29"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "vmware-svga"
++  },
++  "id": "libvirt-30"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "vgamem_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    }
++  ],
++  "id": "libvirt-30"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "qxl"
++  },
++  "id": "libvirt-31"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "yres",
++      "type": "uint32"
++    },
++    {
++      "name": "ram_size_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vgamem_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "debug",
++      "type": "uint32"
++    },
++    {
++      "name": "vram_size_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "revision",
++      "type": "uint32"
++    },
++    {
++      "name": "ram_size",
++      "type": "uint32"
++    },
++    {
++      "name": "vram64_size_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "guestdebug",
++      "type": "uint32"
++    },
++    {
++      "name": "vram_size",
++      "type": "uint64"
++    },
++    {
++      "name": "surfaces",
++      "type": "int32"
++    },
++    {
++      "name": "max_outputs",
++      "type": "uint16"
++    },
++    {
++      "name": "xres",
++      "type": "uint32"
++    },
++    {
++      "name": "cmdlog",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-31"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-gpu-pci"
++  },
++  "id": "libvirt-32"
++}
++
++{
++  "return": [
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "yres",
++      "type": "uint32"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "xres",
++      "type": "uint32"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "max_outputs",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-gpu-device>"
++    },
++    {
++      "name": "max_hostmem",
++      "type": "size"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "stats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virgl",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-32"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-gpu-device"
++  },
++  "id": "libvirt-33"
++}
++
++{
++  "return": [
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "yres",
++      "type": "uint32"
++    },
++    {
++      "name": "stats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "xres",
++      "type": "uint32"
++    },
++    {
++      "name": "max_outputs",
++      "type": "uint32"
++    },
++    {
++      "name": "virgl",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "max_hostmem",
++      "type": "size"
++    }
++  ],
++  "id": "libvirt-33"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "ICH9-LPC"
++  },
++  "id": "libvirt-34"
++}
++
++{
++  "return": [
++    {
++      "name": "memory-hotplug-support",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "sci_int",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "gpe0_blk_len",
++      "type": "uint32"
++    },
++    {
++      "name": "pm_io_base",
++      "type": "uint32"
++    },
++    {
++      "name": "noreboot",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "cpu-hotplug-legacy",
++      "type": "bool"
++    },
++    {
++      "name": "acpi_disable_cmd",
++      "type": "uint8"
++    },
++    {
++      "name": "x-smi-broadcast",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable_s3",
++      "type": "uint8"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "acpi_enable_cmd",
++      "type": "uint8"
++    },
++    {
++      "name": "s4_val",
++      "type": "uint8"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "enable_tco",
++      "type": "bool"
++    },
++    {
++      "name": "disable_s4",
++      "type": "uint8"
++    },
++    {
++      "name": "gpe0_blk",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-34"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-balloon-pci"
++  },
++  "id": "libvirt-35"
++}
++
++{
++  "return": [
++    {
++      "name": "guest-stats-polling-interval",
++      "type": "int"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest-stats",
++      "type": "guest statistics"
++    },
++    {
++      "name": "deflate-on-oom",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "class",
++      "type": "uint32"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-balloon-device>"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-35"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-balloon-ccw"
++  },
++  "id": "libvirt-36"
++}
++
++{
++  "id": "libvirt-36",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-balloon-ccw' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-balloon-device"
++  },
++  "id": "libvirt-37"
++}
++
++{
++  "return": [
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest-stats",
++      "type": "guest statistics"
++    },
++    {
++      "name": "guest-stats-polling-interval",
++      "type": "int"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "deflate-on-oom",
++      "description": "on/off",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-37"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "nec-usb-xhci"
++  },
++  "id": "libvirt-38"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "intrs",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "msix",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "msi",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "superspeed-ports-first",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "streams",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "force-pcie-endcap",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "p3",
++      "type": "uint32"
++    },
++    {
++      "name": "p2",
++      "type": "uint32"
++    },
++    {
++      "name": "slots",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-38"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "intel-iommu"
++  },
++  "id": "libvirt-39"
++}
++
++{
++  "return": [
++    {
++      "name": "eim",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "caching-mode",
++      "type": "bool"
++    },
++    {
++      "name": "x-buggy-eim",
++      "type": "bool"
++    },
++    {
++      "name": "intremap",
++      "type": "bool"
++    },
++    {
++      "name": "version",
++      "type": "uint32"
++    },
++    {
++      "name": "pt",
++      "type": "bool"
++    },
++    {
++      "name": "device-iotlb",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-39"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "mch"
++  },
++  "id": "libvirt-40"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "extended-tseg-mbytes",
++      "type": "uint16"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    }
++  ],
++  "id": "libvirt-40"
++}
++
++{
++  "execute": "query-machines",
++  "id": "libvirt-41"
++}
++
++{
++  "return": [
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.12",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.4",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-1.3",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.7",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.6",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "none",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-1.7",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.8",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-1.6",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.11",
++      "is-default": true,
++      "cpu-max": 255,
++      "alias": "pc"
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.7",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.10",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.11",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.3",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.10",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-1.2",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.2",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "isapc",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.5",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.15",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.14",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-1.5",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.6",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-1.4",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.5",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.9",
++      "cpu-max": 288
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-1.1",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.1",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.8",
++      "cpu-max": 288
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-1.0",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.0",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.4",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.9",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.11",
++      "cpu-max": 288,
++      "alias": "q35"
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.13",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.10",
++      "cpu-max": 288
++    }
++  ],
++  "id": "libvirt-41"
++}
++
++{
++  "execute": "query-cpu-definitions",
++  "id": "libvirt-42"
++}
++
++{
++  "return": [
++    {
++      "name": "max",
++      "typename": "max-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": false
++    },
++    {
++      "name": "host",
++      "typename": "host-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": false
++    },
++    {
++      "name": "base",
++      "typename": "base-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": true,
++      "migration-safe": true
++    },
++    {
++      "name": "qemu64",
++      "typename": "qemu64-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "qemu32",
++      "typename": "qemu32-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "phenom",
++      "typename": "phenom-x86_64-cpu",
++      "unavailable-features": [
++        "mmxext",
++        "fxsr-opt",
++        "3dnowext",
++        "3dnow",
++        "sse4a",
++        "npt"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium3",
++      "typename": "pentium3-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium2",
++      "typename": "pentium2-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium",
++      "typename": "pentium-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "n270",
++      "typename": "n270-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "kvm64",
++      "typename": "kvm64-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "kvm32",
++      "typename": "kvm32-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "coreduo",
++      "typename": "coreduo-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "core2duo",
++      "typename": "core2duo-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "athlon",
++      "typename": "athlon-x86_64-cpu",
++      "unavailable-features": [
++        "mmxext",
++        "3dnowext",
++        "3dnow"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Westmere",
++      "typename": "Westmere-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Server",
++      "typename": "Skylake-Server-x86_64-cpu",
++      "unavailable-features": [
++        "avx512f",
++        "avx512dq",
++        "clwb",
++        "avx512cd",
++        "avx512bw",
++        "avx512vl",
++        "avx512f",
++        "avx512f",
++        "avx512f"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Client",
++      "typename": "Skylake-Client-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "SandyBridge",
++      "typename": "SandyBridge-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Penryn",
++      "typename": "Penryn-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G5",
++      "typename": "Opteron_G5-x86_64-cpu",
++      "unavailable-features": [
++        "sse4a",
++        "misalignsse",
++        "xop",
++        "fma4",
++        "tbm"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G4",
++      "typename": "Opteron_G4-x86_64-cpu",
++      "unavailable-features": [
++        "sse4a",
++        "misalignsse",
++        "xop",
++        "fma4"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G3",
++      "typename": "Opteron_G3-x86_64-cpu",
++      "unavailable-features": [
++        "sse4a",
++        "misalignsse"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G2",
++      "typename": "Opteron_G2-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G1",
++      "typename": "Opteron_G1-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Nehalem",
++      "typename": "Nehalem-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "IvyBridge",
++      "typename": "IvyBridge-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell",
++      "typename": "Haswell-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell-noTSX",
++      "typename": "Haswell-noTSX-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "EPYC",
++      "typename": "EPYC-x86_64-cpu",
++      "unavailable-features": [
++        "sha-ni",
++        "mmxext",
++        "fxsr-opt",
++        "cr8legacy",
++        "sse4a",
++        "misalignsse",
++        "osvw"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Conroe",
++      "typename": "Conroe-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell",
++      "typename": "Broadwell-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell-noTSX",
++      "typename": "Broadwell-noTSX-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "486",
++      "typename": "486-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    }
++  ],
++  "id": "libvirt-42"
++}
++
++{
++  "execute": "query-tpm-models",
++  "id": "libvirt-43"
++}
++
++{
++  "return": [
++    "tpm-tis"
++  ],
++  "id": "libvirt-43"
++}
++
++{
++  "execute": "query-tpm-types",
++  "id": "libvirt-44"
++}
++
++{
++  "return": [
++    "passthrough",
++    "emulator"
++  ],
++  "id": "libvirt-44"
++}
++
++{
++  "execute": "query-command-line-options",
++  "id": "libvirt-45"
++}
++
++{
++  "return": [
++    {
++      "parameters": [
++        {
++          "name": "timeout",
++          "help": "Request timeout in seconds (default 0 = no timeout)",
++          "type": "number"
++        },
++        {
++          "name": "initiator-name",
++          "help": "Initiator iqn name to use when connecting",
++          "type": "string"
++        },
++        {
++          "name": "header-digest",
++          "help": "HeaderDigest setting. {CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
++          "type": "string"
++        },
++        {
++          "name": "password-secret",
++          "help": "ID of the secret providing password for CHAP authentication to target",
++          "type": "string"
++        },
++        {
++          "name": "password",
++          "help": "password for CHAP authentication to target",
++          "type": "string"
++        },
++        {
++          "name": "user",
++          "help": "username for CHAP authentication to target",
++          "type": "string"
++        }
++      ],
++      "option": "iscsi"
++    },
++    {
++      "parameters": [
++        {
++          "name": "non-adaptive",
++          "type": "boolean"
++        },
++        {
++          "name": "lossy",
++          "type": "boolean"
++        },
++        {
++          "name": "acl",
++          "type": "boolean"
++        },
++        {
++          "name": "x509verify",
++          "type": "string"
++        },
++        {
++          "name": "tls",
++          "type": "boolean"
++        },
++        {
++          "name": "sasl",
++          "type": "boolean"
++        },
++        {
++          "name": "key-delay-ms",
++          "type": "number"
++        },
++        {
++          "name": "lock-key-sync",
++          "type": "boolean"
++        },
++        {
++          "name": "reverse",
++          "type": "boolean"
++        },
++        {
++          "name": "password",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv6",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv4",
++          "type": "boolean"
++        },
++        {
++          "name": "to",
++          "type": "number"
++        },
++        {
++          "name": "connections",
++          "type": "number"
++        },
++        {
++          "name": "head",
++          "type": "number"
++        },
++        {
++          "name": "display",
++          "type": "string"
++        },
++        {
++          "name": "share",
++          "type": "string"
++        },
++        {
++          "name": "x509",
++          "type": "string"
++        },
++        {
++          "name": "tls-creds",
++          "type": "string"
++        },
++        {
++          "name": "websocket",
++          "type": "string"
++        },
++        {
++          "name": "vnc",
++          "type": "string"
++        }
++      ],
++      "option": "vnc"
++    },
++    {
++      "parameters": [
++        {
++          "name": "rendernode",
++          "type": "string"
++        },
++        {
++          "name": "gl",
++          "type": "boolean"
++        },
++        {
++          "name": "head",
++          "type": "number"
++        },
++        {
++          "name": "display",
++          "type": "string"
++        },
++        {
++          "name": "seamless-migration",
++          "type": "boolean"
++        },
++        {
++          "name": "playback-compression",
++          "type": "boolean"
++        },
++        {
++          "name": "agent-mouse",
++          "type": "boolean"
++        },
++        {
++          "name": "streaming-video",
++          "type": "string"
++        },
++        {
++          "name": "zlib-glz-wan-compression",
++          "type": "string"
++        },
++        {
++          "name": "jpeg-wan-compression",
++          "type": "string"
++        },
++        {
++          "name": "image-compression",
++          "type": "string"
++        },
++        {
++          "name": "plaintext-channel",
++          "type": "string"
++        },
++        {
++          "name": "tls-channel",
++          "type": "string"
++        },
++        {
++          "name": "tls-ciphers",
++          "type": "string"
++        },
++        {
++          "name": "x509-dh-key-file",
++          "type": "string"
++        },
++        {
++          "name": "x509-cacert-file",
++          "type": "string"
++        },
++        {
++          "name": "x509-cert-file",
++          "type": "string"
++        },
++        {
++          "name": "x509-key-password",
++          "type": "string"
++        },
++        {
++          "name": "x509-key-file",
++          "type": "string"
++        },
++        {
++          "name": "x509-dir",
++          "type": "string"
++        },
++        {
++          "name": "sasl",
++          "type": "boolean"
++        },
++        {
++          "name": "disable-agent-file-xfer",
++          "type": "boolean"
++        },
++        {
++          "name": "disable-copy-paste",
++          "type": "boolean"
++        },
++        {
++          "name": "disable-ticketing",
++          "type": "boolean"
++        },
++        {
++          "name": "password",
++          "type": "string"
++        },
++        {
++          "name": "unix",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv6",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv4",
++          "type": "boolean"
++        },
++        {
++          "name": "addr",
++          "type": "string"
++        },
++        {
++          "name": "tls-port",
++          "type": "number"
++        },
++        {
++          "name": "port",
++          "type": "number"
++        }
++      ],
++      "option": "spice"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "smbios"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "acpi"
++    },
++    {
++      "parameters": [
++        {
++          "name": "dmode",
++          "type": "number"
++        },
++        {
++          "name": "fmode",
++          "type": "number"
++        },
++        {
++          "name": "sock_fd",
++          "type": "number"
++        },
++        {
++          "name": "socket",
++          "type": "string"
++        },
++        {
++          "name": "readonly",
++          "type": "boolean"
++        },
++        {
++          "name": "writeout",
++          "type": "string"
++        },
++        {
++          "name": "security_model",
++          "type": "string"
++        },
++        {
++          "name": "mount_tag",
++          "type": "string"
++        },
++        {
++          "name": "path",
++          "type": "string"
++        },
++        {
++          "name": "fsdriver",
++          "type": "string"
++        }
++      ],
++      "option": "virtfs"
++    },
++    {
++      "parameters": [
++        {
++          "name": "throttling.iops-size",
++          "help": "when limiting by iops max size of an I/O in bytes",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max-length",
++          "help": "length of the bps-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max-length",
++          "help": "length of the bps-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max-length",
++          "help": "length of the bps-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max-length",
++          "help": "length of the iops-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max-length",
++          "help": "length of the iops-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max-length",
++          "help": "length of the iops-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max",
++          "help": "total bytes write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max",
++          "help": "total bytes read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max",
++          "help": "total bytes burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max",
++          "help": "I/O operations write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max",
++          "help": "I/O operations read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max",
++          "help": "I/O operations burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write",
++          "help": "limit write bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read",
++          "help": "limit read bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total",
++          "help": "limit total bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write",
++          "help": "limit write operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read",
++          "help": "limit read operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total",
++          "help": "limit total I/O operations per second",
++          "type": "number"
++        },
++        {
++          "name": "dmode",
++          "type": "number"
++        },
++        {
++          "name": "fmode",
++          "type": "number"
++        },
++        {
++          "name": "sock_fd",
++          "type": "number"
++        },
++        {
++          "name": "socket",
++          "type": "string"
++        },
++        {
++          "name": "readonly",
++          "type": "boolean"
++        },
++        {
++          "name": "writeout",
++          "type": "string"
++        },
++        {
++          "name": "security_model",
++          "type": "string"
++        },
++        {
++          "name": "path",
++          "type": "string"
++        },
++        {
++          "name": "fsdriver",
++          "type": "string"
++        }
++      ],
++      "option": "fsdev"
++    },
++    {
++      "parameters": [
++        {
++          "name": "string",
++          "help": "Sets content of the blob to be inserted from a string",
++          "type": "string"
++        },
++        {
++          "name": "file",
++          "help": "Sets the name of the file from which\nthe fw_cfg blob will be loaded",
++          "type": "string"
++        },
++        {
++          "name": "name",
++          "help": "Sets the fw_cfg name of the blob to be inserted",
++          "type": "string"
++        }
++      ],
++      "option": "fw_cfg"
++    },
++    {
++      "parameters": [
++        {
++          "name": "arg",
++          "type": "string"
++        },
++        {
++          "name": "target",
++          "type": "string"
++        },
++        {
++          "name": "enable",
++          "type": "boolean"
++        }
++      ],
++      "option": "semihosting-config"
++    },
++    {
++      "parameters": [
++        {
++          "name": "rrsnapshot",
++          "type": "string"
++        },
++        {
++          "name": "rrfile",
++          "type": "string"
++        },
++        {
++          "name": "rr",
++          "type": "string"
++        },
++        {
++          "name": "sleep",
++          "type": "boolean"
++        },
++        {
++          "name": "align",
++          "type": "boolean"
++        },
++        {
++          "name": "shift",
++          "type": "string"
++        }
++      ],
++      "option": "icount"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "numa"
++    },
++    {
++      "parameters": [
++        {
++          "name": "debug-threads",
++          "help": "When enabled, name the individual threads; defaults off.\nNOTE: The thread names are for debugging and not a\nstable API.",
++          "type": "boolean"
++        },
++        {
++          "name": "process",
++          "help": "Sets the name of the QEMU process, as shown in top etc",
++          "type": "string"
++        },
++        {
++          "name": "guest",
++          "help": "Sets the name of the guest.\nThis name will be displayed in the SDL window caption.\nThe name will also be used for the VNC server",
++          "type": "string"
++        }
++      ],
++      "option": "name"
++    },
++    {
++      "parameters": [
++        {
++          "name": "timestamp",
++          "type": "boolean"
++        }
++      ],
++      "option": "msg"
++    },
++    {
++      "parameters": [
++        {
++          "name": "mlock",
++          "type": "boolean"
++        }
++      ],
++      "option": "realtime"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "tpmdev"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "object"
++    },
++    {
++      "parameters": [
++        {
++          "name": "opaque",
++          "help": "free-form string used to describe fd",
++          "type": "string"
++        },
++        {
++          "name": "set",
++          "help": "ID of the fd set to add fd to",
++          "type": "number"
++        },
++        {
++          "name": "fd",
++          "help": "file descriptor of which a duplicate is added to fd set",
++          "type": "number"
++        }
++      ],
++      "option": "add-fd"
++    },
++    {
++      "parameters": [
++        {
++          "name": "resourcecontrol",
++          "type": "string"
++        },
++        {
++          "name": "spawn",
++          "type": "string"
++        },
++        {
++          "name": "elevateprivileges",
++          "type": "string"
++        },
++        {
++          "name": "obsolete",
++          "type": "string"
++        },
++        {
++          "name": "enable",
++          "type": "boolean"
++        }
++      ],
++      "option": "sandbox"
++    },
++    {
++      "parameters": [
++        {
++          "name": "strict",
++          "type": "boolean"
++        },
++        {
++          "name": "reboot-timeout",
++          "type": "string"
++        },
++        {
++          "name": "splash-time",
++          "type": "string"
++        },
++        {
++          "name": "splash",
++          "type": "string"
++        },
++        {
++          "name": "menu",
++          "type": "boolean"
++        },
++        {
++          "name": "once",
++          "type": "string"
++        },
++        {
++          "name": "order",
++          "type": "string"
++        }
++      ],
++      "option": "boot-opts"
++    },
++    {
++      "parameters": [
++        {
++          "name": "maxcpus",
++          "type": "number"
++        },
++        {
++          "name": "threads",
++          "type": "number"
++        },
++        {
++          "name": "cores",
++          "type": "number"
++        },
++        {
++          "name": "sockets",
++          "type": "number"
++        },
++        {
++          "name": "cpus",
++          "type": "number"
++        }
++      ],
++      "option": "smp-opts"
++    },
++    {
++      "parameters": [
++        {
++          "name": "maxmem",
++          "type": "size"
++        },
++        {
++          "name": "slots",
++          "type": "number"
++        },
++        {
++          "name": "size",
++          "type": "size"
++        }
++      ],
++      "option": "memory"
++    },
++    {
++      "parameters": [
++        {
++          "name": "thread",
++          "help": "Enable/disable multi-threaded TCG",
++          "type": "string"
++        },
++        {
++          "name": "accel",
++          "help": "Select the type of accelerator",
++          "type": "string"
++        }
++      ],
++      "option": "accel"
++    },
++    {
++      "parameters": [
++        {
++          "name": "loadparm",
++          "help": "Up to 8 chars in set of [A-Za-z0-9. ](lower case chars converted to upper case) to pass to machine loader, boot manager, and guest kernel",
++          "type": "string"
++        },
++        {
++          "name": "dea-key-wrap",
++          "help": "enable/disable DEA key wrapping using the CPACF wrapping key",
++          "type": "boolean"
++        },
++        {
++          "name": "aes-key-wrap",
++          "help": "enable/disable AES key wrapping using the CPACF wrapping key",
++          "type": "boolean"
++        },
++        {
++          "name": "suppress-vmdesc",
++          "help": "Set on to disable self-describing migration",
++          "type": "boolean"
++        },
++        {
++          "name": "iommu",
++          "help": "Set on/off to enable/disable Intel IOMMU (VT-d)",
++          "type": "boolean"
++        },
++        {
++          "name": "firmware",
++          "help": "firmware image",
++          "type": "string"
++        },
++        {
++          "name": "usb",
++          "help": "Set on/off to enable/disable usb",
++          "type": "boolean"
++        },
++        {
++          "name": "mem-merge",
++          "help": "enable/disable memory merge support",
++          "type": "boolean"
++        },
++        {
++          "name": "dump-guest-core",
++          "help": "Include guest memory in  a core dump",
++          "type": "boolean"
++        },
++        {
++          "name": "dt_compatible",
++          "help": "Overrides the \"compatible\" property of the dt root node",
++          "type": "string"
++        },
++        {
++          "name": "phandle_start",
++          "help": "The first phandle ID we may generate dynamically",
++          "type": "number"
++        },
++        {
++          "name": "dumpdtb",
++          "help": "Dump current dtb to a file and quit",
++          "type": "string"
++        },
++        {
++          "name": "dtb",
++          "help": "Linux kernel device tree file",
++          "type": "string"
++        },
++        {
++          "name": "append",
++          "help": "Linux kernel command line",
++          "type": "string"
++        },
++        {
++          "name": "initrd",
++          "help": "Linux initial ramdisk file",
++          "type": "string"
++        },
++        {
++          "name": "kernel",
++          "help": "Linux kernel image file",
++          "type": "string"
++        },
++        {
++          "name": "kvm_shadow_mem",
++          "help": "KVM shadow MMU size",
++          "type": "size"
++        },
++        {
++          "name": "kernel_irqchip",
++          "help": "use KVM in-kernel irqchip",
++          "type": "boolean"
++        },
++        {
++          "name": "accel",
++          "help": "accelerator list",
++          "type": "string"
++        },
++        {
++          "name": "type",
++          "help": "emulated machine",
++          "type": "string"
++        }
++      ],
++      "option": "machine"
++    },
++    {
++      "parameters": [
++        {
++          "name": "romfile",
++          "type": "string"
++        },
++        {
++          "name": "bootindex",
++          "type": "number"
++        }
++      ],
++      "option": "option-rom"
++    },
++    {
++      "parameters": [
++        {
++          "name": "file",
++          "type": "string"
++        },
++        {
++          "name": "events",
++          "type": "string"
++        },
++        {
++          "name": "enable",
++          "type": "string"
++        }
++      ],
++      "option": "trace"
++    },
++    {
++      "parameters": [
++        {
++          "name": "pretty",
++          "type": "boolean"
++        },
++        {
++          "name": "default",
++          "type": "boolean"
++        },
++        {
++          "name": "chardev",
++          "type": "string"
++        },
++        {
++          "name": "mode",
++          "type": "string"
++        }
++      ],
++      "option": "mon"
++    },
++    {
++      "parameters": [
++        {
++          "name": "value",
++          "type": "string"
++        },
++        {
++          "name": "property",
++          "type": "string"
++        },
++        {
++          "name": "driver",
++          "type": "string"
++        }
++      ],
++      "option": "global"
++    },
++    {
++      "parameters": [
++        {
++          "name": "driftfix",
++          "type": "string"
++        },
++        {
++          "name": "clock",
++          "type": "string"
++        },
++        {
++          "name": "base",
++          "type": "string"
++        }
++      ],
++      "option": "rtc"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "net"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "netdev"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "device"
++    },
++    {
++      "parameters": [
++        {
++          "name": "logappend",
++          "type": "boolean"
++        },
++        {
++          "name": "logfile",
++          "type": "string"
++        },
++        {
++          "name": "append",
++          "type": "boolean"
++        },
++        {
++          "name": "chardev",
++          "type": "string"
++        },
++        {
++          "name": "size",
++          "type": "size"
++        },
++        {
++          "name": "debug",
++          "type": "number"
++        },
++        {
++          "name": "name",
++          "type": "string"
++        },
++        {
++          "name": "signal",
++          "type": "boolean"
++        },
++        {
++          "name": "mux",
++          "type": "boolean"
++        },
++        {
++          "name": "rows",
++          "type": "number"
++        },
++        {
++          "name": "cols",
++          "type": "number"
++        },
++        {
++          "name": "height",
++          "type": "number"
++        },
++        {
++          "name": "width",
++          "type": "number"
++        },
++        {
++          "name": "tls-creds",
++          "type": "string"
++        },
++        {
++          "name": "tn3270",
++          "type": "boolean"
++        },
++        {
++          "name": "telnet",
++          "type": "boolean"
++        },
++        {
++          "name": "reconnect",
++          "type": "number"
++        },
++        {
++          "name": "delay",
++          "type": "boolean"
++        },
++        {
++          "name": "server",
++          "type": "boolean"
++        },
++        {
++          "name": "wait",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv6",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv4",
++          "type": "boolean"
++        },
++        {
++          "name": "to",
++          "type": "number"
++        },
++        {
++          "name": "localport",
++          "type": "string"
++        },
++        {
++          "name": "localaddr",
++          "type": "string"
++        },
++        {
++          "name": "port",
++          "type": "string"
++        },
++        {
++          "name": "host",
++          "type": "string"
++        },
++        {
++          "name": "path",
++          "type": "string"
++        },
++        {
++          "name": "backend",
++          "type": "string"
++        }
++      ],
++      "option": "chardev"
++    },
++    {
++      "parameters": [
++        {
++          "name": "copy-on-read",
++          "help": "copy read data from backing file into image file",
++          "type": "boolean"
++        },
++        {
++          "name": "werror",
++          "help": "write error action",
++          "type": "string"
++        },
++        {
++          "name": "rerror",
++          "help": "read error action",
++          "type": "string"
++        },
++        {
++          "name": "read-only",
++          "help": "open drive file as read-only",
++          "type": "boolean"
++        },
++        {
++          "name": "file",
++          "help": "file name",
++          "type": "string"
++        },
++        {
++          "name": "serial",
++          "help": "disk serial number",
++          "type": "string"
++        },
++        {
++          "name": "addr",
++          "help": "pci address (virtio only)",
++          "type": "string"
++        },
++        {
++          "name": "boot",
++          "help": "(deprecated, ignored)",
++          "type": "boolean"
++        },
++        {
++          "name": "trans",
++          "help": "chs translation (auto, lba, none)",
++          "type": "string"
++        },
++        {
++          "name": "secs",
++          "help": "number of sectors (ide disk geometry)",
++          "type": "number"
++        },
++        {
++          "name": "heads",
++          "help": "number of heads (ide disk geometry)",
++          "type": "number"
++        },
++        {
++          "name": "cyls",
++          "help": "number of cylinders (ide disk geometry)",
++          "type": "number"
++        },
++        {
++          "name": "if",
++          "help": "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
++          "type": "string"
++        },
++        {
++          "name": "media",
++          "help": "media type (disk, cdrom)",
++          "type": "string"
++        },
++        {
++          "name": "index",
++          "help": "index number",
++          "type": "number"
++        },
++        {
++          "name": "unit",
++          "help": "unit number (i.e. lun for scsi)",
++          "type": "number"
++        },
++        {
++          "name": "bus",
++          "help": "bus number",
++          "type": "number"
++        },
++        {
++          "name": "stats-account-failed",
++          "help": "whether to account for failed I/O operations in the statistics",
++          "type": "boolean"
++        },
++        {
++          "name": "stats-account-invalid",
++          "help": "whether to account for invalid I/O operations in the statistics",
++          "type": "boolean"
++        },
++        {
++          "name": "detect-zeroes",
++          "help": "try to optimize zero writes (off, on, unmap)",
++          "type": "string"
++        },
++        {
++          "name": "throttling.group",
++          "help": "name of the block throttling group",
++          "type": "string"
++        },
++        {
++          "name": "throttling.iops-size",
++          "help": "when limiting by iops max size of an I/O in bytes",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max-length",
++          "help": "length of the bps-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max-length",
++          "help": "length of the bps-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max-length",
++          "help": "length of the bps-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max-length",
++          "help": "length of the iops-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max-length",
++          "help": "length of the iops-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max-length",
++          "help": "length of the iops-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max",
++          "help": "total bytes write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max",
++          "help": "total bytes read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max",
++          "help": "total bytes burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max",
++          "help": "I/O operations write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max",
++          "help": "I/O operations read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max",
++          "help": "I/O operations burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write",
++          "help": "limit write bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read",
++          "help": "limit read bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total",
++          "help": "limit total bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write",
++          "help": "limit write operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read",
++          "help": "limit read operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total",
++          "help": "limit total I/O operations per second",
++          "type": "number"
++        },
++        {
++          "name": "werror",
++          "help": "write error action",
++          "type": "string"
++        },
++        {
++          "name": "format",
++          "help": "disk format (raw, qcow2, ...)",
++          "type": "string"
++        },
++        {
++          "name": "cache.writeback",
++          "help": "Enable writeback mode",
++          "type": "boolean"
++        },
++        {
++          "name": "aio",
++          "help": "host AIO implementation (threads, native)",
++          "type": "string"
++        },
++        {
++          "name": "snapshot",
++          "help": "enable/disable snapshot mode",
++          "type": "boolean"
++        },
++        {
++          "name": "force-share",
++          "help": "always accept other writers (default: off)",
++          "type": "boolean"
++        },
++        {
++          "name": "discard",
++          "help": "discard operation (ignore/off, unmap/on)",
++          "type": "string"
++        },
++        {
++          "name": "read-only",
++          "help": "Node is opened in read-only mode",
++          "type": "boolean"
++        },
++        {
++          "name": "cache.no-flush",
++          "help": "Ignore flush requests",
++          "type": "boolean"
++        },
++        {
++          "name": "cache.direct",
++          "help": "Bypass software writeback cache on the host",
++          "type": "boolean"
++        },
++        {
++          "name": "driver",
++          "help": "Block driver to use for the node",
++          "type": "string"
++        },
++        {
++          "name": "node-name",
++          "help": "Node name of the block device node",
++          "type": "string"
++        }
++      ],
++      "option": "drive"
++    }
++  ],
++  "id": "libvirt-45"
++}
++
++{
++  "execute": "query-migrate-capabilities",
++  "id": "libvirt-46"
++}
++
++{
++  "return": [
++    {
++      "state": false,
++      "capability": "xbzrle"
++    },
++    {
++      "state": false,
++      "capability": "rdma-pin-all"
++    },
++    {
++      "state": false,
++      "capability": "auto-converge"
++    },
++    {
++      "state": false,
++      "capability": "zero-blocks"
++    },
++    {
++      "state": false,
++      "capability": "compress"
++    },
++    {
++      "state": false,
++      "capability": "events"
++    },
++    {
++      "state": false,
++      "capability": "postcopy-ram"
++    },
++    {
++      "state": false,
++      "capability": "x-colo"
++    },
++    {
++      "state": false,
++      "capability": "release-ram"
++    },
++    {
++      "state": false,
++      "capability": "block"
++    },
++    {
++      "state": false,
++      "capability": "return-path"
++    },
++    {
++      "state": false,
++      "capability": "pause-before-switchover"
++    },
++    {
++      "state": false,
++      "capability": "x-multifd"
++    }
++  ],
++  "id": "libvirt-46"
++}
++
++{
++  "execute": "query-qmp-schema",
++  "id": "libvirt-47"
++}
++
++{
++  "return": [
++    {
++      "name": "ACPI_DEVICE_OST",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "BALLOON_CHANGE",
++      "meta-type": "event",
++      "arg-type": "1"
++    },
++    {
++      "name": "BLOCK_IMAGE_CORRUPTED",
++      "meta-type": "event",
++      "arg-type": "2"
++    },
++    {
++      "name": "BLOCK_IO_ERROR",
++      "meta-type": "event",
++      "arg-type": "3"
++    },
++    {
++      "name": "BLOCK_JOB_CANCELLED",
++      "meta-type": "event",
++      "arg-type": "4"
++    },
++    {
++      "name": "BLOCK_JOB_COMPLETED",
++      "meta-type": "event",
++      "arg-type": "5"
++    },
++    {
++      "name": "BLOCK_JOB_ERROR",
++      "meta-type": "event",
++      "arg-type": "6"
++    },
++    {
++      "name": "BLOCK_JOB_READY",
++      "meta-type": "event",
++      "arg-type": "7"
++    },
++    {
++      "name": "BLOCK_WRITE_THRESHOLD",
++      "meta-type": "event",
++      "arg-type": "8"
++    },
++    {
++      "name": "DEVICE_DELETED",
++      "meta-type": "event",
++      "arg-type": "9"
++    },
++    {
++      "name": "DEVICE_TRAY_MOVED",
++      "meta-type": "event",
++      "arg-type": "10"
++    },
++    {
++      "name": "DUMP_COMPLETED",
++      "meta-type": "event",
++      "arg-type": "11"
++    },
++    {
++      "name": "GUEST_PANICKED",
++      "meta-type": "event",
++      "arg-type": "12"
++    },
++    {
++      "name": "MEM_UNPLUG_ERROR",
++      "meta-type": "event",
++      "arg-type": "13"
++    },
++    {
++      "name": "MIGRATION",
++      "meta-type": "event",
++      "arg-type": "14"
++    },
++    {
++      "name": "MIGRATION_PASS",
++      "meta-type": "event",
++      "arg-type": "15"
++    },
++    {
++      "name": "NIC_RX_FILTER_CHANGED",
++      "meta-type": "event",
++      "arg-type": "16"
++    },
++    {
++      "name": "POWERDOWN",
++      "meta-type": "event",
++      "arg-type": "17"
++    },
++    {
++      "name": "QUORUM_FAILURE",
++      "meta-type": "event",
++      "arg-type": "18"
++    },
++    {
++      "name": "QUORUM_REPORT_BAD",
++      "meta-type": "event",
++      "arg-type": "19"
++    },
++    {
++      "name": "RESET",
++      "meta-type": "event",
++      "arg-type": "20"
++    },
++    {
++      "name": "RESUME",
++      "meta-type": "event",
++      "arg-type": "17"
++    },
++    {
++      "name": "RTC_CHANGE",
++      "meta-type": "event",
++      "arg-type": "21"
++    },
++    {
++      "name": "SHUTDOWN",
++      "meta-type": "event",
++      "arg-type": "22"
++    },
++    {
++      "name": "SPICE_CONNECTED",
++      "meta-type": "event",
++      "arg-type": "23"
++    },
++    {
++      "name": "SPICE_DISCONNECTED",
++      "meta-type": "event",
++      "arg-type": "24"
++    },
++    {
++      "name": "SPICE_INITIALIZED",
++      "meta-type": "event",
++      "arg-type": "25"
++    },
++    {
++      "name": "SPICE_MIGRATE_COMPLETED",
++      "meta-type": "event",
++      "arg-type": "17"
++    },
++    {
++      "name": "STOP",
++      "meta-type": "event",
++      "arg-type": "17"
++    },
++    {
++      "name": "SUSPEND",
++      "meta-type": "event",
++      "arg-type": "17"
++    },
++    {
++      "name": "SUSPEND_DISK",
++      "meta-type": "event",
++      "arg-type": "17"
++    },
++    {
++      "name": "VNC_CONNECTED",
++      "meta-type": "event",
++      "arg-type": "26"
++    },
++    {
++      "name": "VNC_DISCONNECTED",
++      "meta-type": "event",
++      "arg-type": "27"
++    },
++    {
++      "name": "VNC_INITIALIZED",
++      "meta-type": "event",
++      "arg-type": "28"
++    },
++    {
++      "name": "VSERPORT_CHANGE",
++      "meta-type": "event",
++      "arg-type": "29"
++    },
++    {
++      "name": "WAKEUP",
++      "meta-type": "event",
++      "arg-type": "17"
++    },
++    {
++      "name": "WATCHDOG",
++      "meta-type": "event",
++      "arg-type": "30"
++    },
++    {
++      "name": "add-fd",
++      "ret-type": "32",
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "add_client",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "33"
++    },
++    {
++      "name": "balloon",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "34"
++    },
++    {
++      "name": "block-commit",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "35"
++    },
++    {
++      "name": "block-dirty-bitmap-add",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "36"
++    },
++    {
++      "name": "block-dirty-bitmap-clear",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "37"
++    },
++    {
++      "name": "block-dirty-bitmap-remove",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "37"
++    },
++    {
++      "name": "block-job-cancel",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "38"
++    },
++    {
++      "name": "block-job-complete",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "39"
++    },
++    {
++      "name": "block-job-pause",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "40"
++    },
++    {
++      "name": "block-job-resume",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "41"
++    },
++    {
++      "name": "block-job-set-speed",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "42"
++    },
++    {
++      "name": "block-set-write-threshold",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "43"
++    },
++    {
++      "name": "block-stream",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "44"
++    },
++    {
++      "name": "block_passwd",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "45"
++    },
++    {
++      "name": "block_resize",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "46"
++    },
++    {
++      "name": "block_set_io_throttle",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "47"
++    },
++    {
++      "name": "blockdev-add",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "48"
++    },
++    {
++      "name": "blockdev-backup",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "49"
++    },
++    {
++      "name": "blockdev-change-medium",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "50"
++    },
++    {
++      "name": "blockdev-close-tray",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "51"
++    },
++    {
++      "name": "blockdev-del",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "52"
++    },
++    {
++      "name": "blockdev-mirror",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "53"
++    },
++    {
++      "name": "blockdev-open-tray",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "54"
++    },
++    {
++      "name": "blockdev-snapshot",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "55"
++    },
++    {
++      "name": "blockdev-snapshot-delete-internal-sync",
++      "ret-type": "57",
++      "meta-type": "command",
++      "arg-type": "56"
++    },
++    {
++      "name": "blockdev-snapshot-internal-sync",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "58"
++    },
++    {
++      "name": "blockdev-snapshot-sync",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "59"
++    },
++    {
++      "name": "change",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "60"
++    },
++    {
++      "name": "change-backing-file",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "61"
++    },
++    {
++      "name": "change-vnc-password",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "62"
++    },
++    {
++      "name": "chardev-add",
++      "ret-type": "64",
++      "meta-type": "command",
++      "arg-type": "63"
++    },
++    {
++      "name": "chardev-change",
++      "ret-type": "64",
++      "meta-type": "command",
++      "arg-type": "65"
++    },
++    {
++      "name": "chardev-remove",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "66"
++    },
++    {
++      "name": "chardev-send-break",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "67"
++    },
++    {
++      "name": "client_migrate_info",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "68"
++    },
++    {
++      "name": "closefd",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "69"
++    },
++    {
++      "name": "cont",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "cpu",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "70"
++    },
++    {
++      "name": "cpu-add",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "71"
++    },
++    {
++      "name": "device-list-properties",
++      "ret-type": "[73]",
++      "meta-type": "command",
++      "arg-type": "72"
++    },
++    {
++      "name": "device_add",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "74"
++    },
++    {
++      "name": "device_del",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "75"
++    },
++    {
++      "name": "drive-backup",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "76"
++    },
++    {
++      "name": "drive-mirror",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "77"
++    },
++    {
++      "name": "dump-guest-memory",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "78"
++    },
++    {
++      "name": "dump-skeys",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "79"
++    },
++    {
++      "name": "eject",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "80"
++    },
++    {
++      "name": "expire_password",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "81"
++    },
++    {
++      "name": "getfd",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "82"
++    },
++    {
++      "name": "human-monitor-command",
++      "ret-type": "str",
++      "meta-type": "command",
++      "arg-type": "83"
++    },
++    {
++      "name": "inject-nmi",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "input-send-event",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "84"
++    },
++    {
++      "name": "memsave",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "85"
++    },
++    {
++      "name": "migrate",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "86"
++    },
++    {
++      "name": "migrate-continue",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "87"
++    },
++    {
++      "name": "migrate-incoming",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "88"
++    },
++    {
++      "name": "migrate-set-cache-size",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "89"
++    },
++    {
++      "name": "migrate-set-capabilities",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "90"
++    },
++    {
++      "name": "migrate-set-parameters",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "91"
++    },
++    {
++      "name": "migrate-start-postcopy",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "migrate_cancel",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "migrate_set_downtime",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "92"
++    },
++    {
++      "name": "migrate_set_speed",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "93"
++    },
++    {
++      "name": "nbd-server-add",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "94"
++    },
++    {
++      "name": "nbd-server-start",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "95"
++    },
++    {
++      "name": "nbd-server-stop",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "netdev_add",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "96"
++    },
++    {
++      "name": "netdev_del",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "97"
++    },
++    {
++      "name": "object-add",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "98"
++    },
++    {
++      "name": "object-del",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "99"
++    },
++    {
++      "name": "pmemsave",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "100"
++    },
++    {
++      "name": "qmp_capabilities",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "qom-get",
++      "ret-type": "any",
++      "meta-type": "command",
++      "arg-type": "101"
++    },
++    {
++      "name": "qom-list",
++      "ret-type": "[103]",
++      "meta-type": "command",
++      "arg-type": "102"
++    },
++    {
++      "name": "qom-list-types",
++      "ret-type": "[105]",
++      "meta-type": "command",
++      "arg-type": "104"
++    },
++    {
++      "name": "qom-set",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "106"
++    },
++    {
++      "name": "query-acpi-ospm-status",
++      "ret-type": "[107]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-balloon",
++      "ret-type": "108",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-block",
++      "ret-type": "[109]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-block-jobs",
++      "ret-type": "[110]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-blockstats",
++      "ret-type": "[112]",
++      "meta-type": "command",
++      "arg-type": "111"
++    },
++    {
++      "name": "query-chardev",
++      "ret-type": "[113]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-chardev-backends",
++      "ret-type": "[114]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-command-line-options",
++      "ret-type": "[116]",
++      "meta-type": "command",
++      "arg-type": "115"
++    },
++    {
++      "name": "query-commands",
++      "ret-type": "[117]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-cpu-definitions",
++      "ret-type": "[118]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-cpu-model-baseline",
++      "ret-type": "120",
++      "meta-type": "command",
++      "arg-type": "119"
++    },
++    {
++      "name": "query-cpu-model-comparison",
++      "ret-type": "122",
++      "meta-type": "command",
++      "arg-type": "121"
++    },
++    {
++      "name": "query-cpu-model-expansion",
++      "ret-type": "124",
++      "meta-type": "command",
++      "arg-type": "123"
++    },
++    {
++      "name": "query-cpus",
++      "ret-type": "[125]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-dump",
++      "ret-type": "126",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-dump-guest-memory-capability",
++      "ret-type": "127",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-events",
++      "ret-type": "[128]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-fdsets",
++      "ret-type": "[129]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-gic-capabilities",
++      "ret-type": "[130]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-hotpluggable-cpus",
++      "ret-type": "[131]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-iothreads",
++      "ret-type": "[132]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-kvm",
++      "ret-type": "133",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-machines",
++      "ret-type": "[134]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-memdev",
++      "ret-type": "[135]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-memory-devices",
++      "ret-type": "[136]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-memory-size-summary",
++      "ret-type": "137",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-mice",
++      "ret-type": "[138]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-migrate",
++      "ret-type": "139",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-migrate-cache-size",
++      "ret-type": "int",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-migrate-capabilities",
++      "ret-type": "[140]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-migrate-parameters",
++      "ret-type": "141",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-name",
++      "ret-type": "142",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-named-block-nodes",
++      "ret-type": "[143]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-pci",
++      "ret-type": "[144]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-qmp-schema",
++      "ret-type": "[145]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-rocker",
++      "ret-type": "147",
++      "meta-type": "command",
++      "arg-type": "146"
++    },
++    {
++      "name": "query-rocker-of-dpa-flows",
++      "ret-type": "[149]",
++      "meta-type": "command",
++      "arg-type": "148"
++    },
++    {
++      "name": "query-rocker-of-dpa-groups",
++      "ret-type": "[151]",
++      "meta-type": "command",
++      "arg-type": "150"
++    },
++    {
++      "name": "query-rocker-ports",
++      "ret-type": "[153]",
++      "meta-type": "command",
++      "arg-type": "152"
++    },
++    {
++      "name": "query-rx-filter",
++      "ret-type": "[155]",
++      "meta-type": "command",
++      "arg-type": "154"
++    },
++    {
++      "name": "query-spice",
++      "ret-type": "156",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-status",
++      "ret-type": "157",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-target",
++      "ret-type": "158",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-tpm",
++      "ret-type": "[159]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-tpm-models",
++      "ret-type": "[160]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-tpm-types",
++      "ret-type": "[161]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-uuid",
++      "ret-type": "162",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-version",
++      "ret-type": "163",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-vm-generation-id",
++      "ret-type": "164",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-vnc",
++      "ret-type": "165",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-vnc-servers",
++      "ret-type": "[166]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-xen-replication-status",
++      "ret-type": "167",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "quit",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "remove-fd",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "168"
++    },
++    {
++      "name": "ringbuf-read",
++      "ret-type": "str",
++      "meta-type": "command",
++      "arg-type": "169"
++    },
++    {
++      "name": "ringbuf-write",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "170"
++    },
++    {
++      "name": "rtc-reset-reinjection",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "screendump",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "171"
++    },
++    {
++      "name": "send-key",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "172"
++    },
++    {
++      "name": "set_link",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "173"
++    },
++    {
++      "name": "set_password",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "174"
++    },
++    {
++      "name": "stop",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "system_powerdown",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "system_reset",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "system_wakeup",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "trace-event-get-state",
++      "ret-type": "[176]",
++      "meta-type": "command",
++      "arg-type": "175"
++    },
++    {
++      "name": "trace-event-set-state",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "177"
++    },
++    {
++      "name": "transaction",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "178"
++    },
++    {
++      "name": "watchdog-set-action",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "179"
++    },
++    {
++      "name": "x-blockdev-change",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "180"
++    },
++    {
++      "name": "x-blockdev-insert-medium",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "181"
++    },
++    {
++      "name": "x-blockdev-remove-medium",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "182"
++    },
++    {
++      "name": "x-colo-lost-heartbeat",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "x-debug-block-dirty-bitmap-sha256",
++      "ret-type": "183",
++      "meta-type": "command",
++      "arg-type": "37"
++    },
++    {
++      "name": "xen-colo-do-checkpoint",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "xen-load-devices-state",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "184"
++    },
++    {
++      "name": "xen-save-devices-state",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "185"
++    },
++    {
++      "name": "xen-set-global-dirty-log",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "186"
++    },
++    {
++      "name": "xen-set-replication",
++      "ret-type": "17",
++      "meta-type": "command",
++      "arg-type": "187"
++    },
++    {
++      "name": "0",
++      "members": [
++        {
++          "name": "info",
++          "type": "107"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "1",
++      "members": [
++        {
++          "name": "actual",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "2",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "msg",
++          "type": "str"
++        },
++        {
++          "name": "offset",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "fatal",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "3",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "operation",
++          "type": "188"
++        },
++        {
++          "name": "action",
++          "type": "189"
++        },
++        {
++          "name": "nospace",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "reason",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "4",
++      "members": [
++        {
++          "name": "type",
++          "type": "190"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "5",
++      "members": [
++        {
++          "name": "type",
++          "type": "190"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "6",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "operation",
++          "type": "188"
++        },
++        {
++          "name": "action",
++          "type": "189"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "7",
++      "members": [
++        {
++          "name": "type",
++          "type": "190"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "8",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "amount-exceeded",
++          "type": "int"
++        },
++        {
++          "name": "write-threshold",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "9",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "10",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "tray-open",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "11",
++      "members": [
++        {
++          "name": "result",
++          "type": "126"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "12",
++      "members": [
++        {
++          "name": "action",
++          "type": "191"
++        },
++        {
++          "name": "info",
++          "default": null,
++          "type": "192"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "13",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "msg",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "14",
++      "members": [
++        {
++          "name": "status",
++          "type": "193"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "15",
++      "members": [
++        {
++          "name": "pass",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "16",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "17",
++      "members": [
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "18",
++      "members": [
++        {
++          "name": "reference",
++          "type": "str"
++        },
++        {
++          "name": "sector-num",
++          "type": "int"
++        },
++        {
++          "name": "sectors-count",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "19",
++      "members": [
++        {
++          "name": "type",
++          "type": "194"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "sector-num",
++          "type": "int"
++        },
++        {
++          "name": "sectors-count",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "20",
++      "members": [
++        {
++          "name": "guest",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "21",
++      "members": [
++        {
++          "name": "offset",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "22",
++      "members": [
++        {
++          "name": "guest",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "23",
++      "members": [
++        {
++          "name": "server",
++          "type": "195"
++        },
++        {
++          "name": "client",
++          "type": "195"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "24",
++      "members": [
++        {
++          "name": "server",
++          "type": "195"
++        },
++        {
++          "name": "client",
++          "type": "195"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "25",
++      "members": [
++        {
++          "name": "server",
++          "type": "196"
++        },
++        {
++          "name": "client",
++          "type": "197"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "26",
++      "members": [
++        {
++          "name": "server",
++          "type": "198"
++        },
++        {
++          "name": "client",
++          "type": "199"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "27",
++      "members": [
++        {
++          "name": "server",
++          "type": "198"
++        },
++        {
++          "name": "client",
++          "type": "200"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "28",
++      "members": [
++        {
++          "name": "server",
++          "type": "198"
++        },
++        {
++          "name": "client",
++          "type": "200"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "29",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "open",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "30",
++      "members": [
++        {
++          "name": "action",
++          "type": "201"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "31",
++      "members": [
++        {
++          "name": "fdset-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "opaque",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "32",
++      "members": [
++        {
++          "name": "fdset-id",
++          "type": "int"
++        },
++        {
++          "name": "fd",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "33",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "fdname",
++          "type": "str"
++        },
++        {
++          "name": "skipauth",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "tls",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "34",
++      "members": [
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "35",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "base",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "top",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "filter-node-name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "36",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "granularity",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "persistent",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "autoload",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "37",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "38",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "39",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "40",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "41",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "42",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "43",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "write-threshold",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "44",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "base",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "base-node",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "on-error",
++          "default": null,
++          "type": "202"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "45",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "46",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "47",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "bps",
++          "type": "int"
++        },
++        {
++          "name": "bps_rd",
++          "type": "int"
++        },
++        {
++          "name": "bps_wr",
++          "type": "int"
++        },
++        {
++          "name": "iops",
++          "type": "int"
++        },
++        {
++          "name": "iops_rd",
++          "type": "int"
++        },
++        {
++          "name": "iops_wr",
++          "type": "int"
++        },
++        {
++          "name": "bps_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "48",
++      "tag": "driver",
++      "variants": [
++        {
++          "case": "blkdebug",
++          "type": "207"
++        },
++        {
++          "case": "blkverify",
++          "type": "208"
++        },
++        {
++          "case": "bochs",
++          "type": "209"
++        },
++        {
++          "case": "cloop",
++          "type": "209"
++        },
++        {
++          "case": "dmg",
++          "type": "209"
++        },
++        {
++          "case": "file",
++          "type": "210"
++        },
++        {
++          "case": "ftp",
++          "type": "211"
++        },
++        {
++          "case": "ftps",
++          "type": "212"
++        },
++        {
++          "case": "gluster",
++          "type": "213"
++        },
++        {
++          "case": "host_cdrom",
++          "type": "210"
++        },
++        {
++          "case": "host_device",
++          "type": "210"
++        },
++        {
++          "case": "http",
++          "type": "214"
++        },
++        {
++          "case": "https",
++          "type": "215"
++        },
++        {
++          "case": "iscsi",
++          "type": "216"
++        },
++        {
++          "case": "luks",
++          "type": "217"
++        },
++        {
++          "case": "nbd",
++          "type": "218"
++        },
++        {
++          "case": "nfs",
++          "type": "219"
++        },
++        {
++          "case": "null-aio",
++          "type": "220"
++        },
++        {
++          "case": "null-co",
++          "type": "220"
++        },
++        {
++          "case": "parallels",
++          "type": "209"
++        },
++        {
++          "case": "qcow2",
++          "type": "221"
++        },
++        {
++          "case": "qcow",
++          "type": "222"
++        },
++        {
++          "case": "qed",
++          "type": "223"
++        },
++        {
++          "case": "quorum",
++          "type": "224"
++        },
++        {
++          "case": "raw",
++          "type": "225"
++        },
++        {
++          "case": "rbd",
++          "type": "226"
++        },
++        {
++          "case": "replication",
++          "type": "227"
++        },
++        {
++          "case": "sheepdog",
++          "type": "228"
++        },
++        {
++          "case": "ssh",
++          "type": "229"
++        },
++        {
++          "case": "throttle",
++          "type": "230"
++        },
++        {
++          "case": "vdi",
++          "type": "209"
++        },
++        {
++          "case": "vhdx",
++          "type": "209"
++        },
++        {
++          "case": "vmdk",
++          "type": "223"
++        },
++        {
++          "case": "vpc",
++          "type": "209"
++        },
++        {
++          "case": "vvfat",
++          "type": "231"
++        },
++        {
++          "case": "vxhs",
++          "type": "232"
++        }
++      ],
++      "members": [
++        {
++          "name": "driver",
++          "type": "203"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "discard",
++          "default": null,
++          "type": "204"
++        },
++        {
++          "name": "cache",
++          "default": null,
++          "type": "205"
++        },
++        {
++          "name": "read-only",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "force-share",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "detect-zeroes",
++          "default": null,
++          "type": "206"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "49",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "233"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "compress",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "202"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "202"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "50",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "read-only-mode",
++          "default": null,
++          "type": "234"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "51",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "52",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "53",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "replaces",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "233"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "granularity",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "buf-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "202"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "202"
++        },
++        {
++          "name": "filter-node-name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "54",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "55",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "overlay",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "56",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "57",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "vm-state-size",
++          "type": "int"
++        },
++        {
++          "name": "date-sec",
++          "type": "int"
++        },
++        {
++          "name": "date-nsec",
++          "type": "int"
++        },
++        {
++          "name": "vm-clock-sec",
++          "type": "int"
++        },
++        {
++          "name": "vm-clock-nsec",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "58",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "59",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "snapshot-file",
++          "type": "str"
++        },
++        {
++          "name": "snapshot-node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "235"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "60",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "arg",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "61",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "image-node-name",
++          "type": "str"
++        },
++        {
++          "name": "backing-file",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "62",
++      "members": [
++        {
++          "name": "password",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "63",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "backend",
++          "type": "236"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "64",
++      "members": [
++        {
++          "name": "pty",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "65",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "backend",
++          "type": "236"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "66",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "67",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "68",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "hostname",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-port",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cert-subject",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "69",
++      "members": [
++        {
++          "name": "fdname",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "70",
++      "members": [
++        {
++          "name": "index",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "71",
++      "members": [
++        {
++          "name": "id",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "72",
++      "members": [
++        {
++          "name": "typename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[73]",
++      "element-type": "73",
++      "meta-type": "array"
++    },
++    {
++      "name": "73",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "description",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "74",
++      "members": [
++        {
++          "name": "driver",
++          "type": "str"
++        },
++        {
++          "name": "bus",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "75",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "76",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "233"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "235"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bitmap",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "compress",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "202"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "202"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "77",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "replaces",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "233"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "235"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "granularity",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "buf-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "202"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "202"
++        },
++        {
++          "name": "unmap",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "78",
++      "members": [
++        {
++          "name": "paging",
++          "type": "bool"
++        },
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "detach",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "begin",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "237"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "79",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "80",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "81",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "time",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "82",
++      "members": [
++        {
++          "name": "fdname",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "83",
++      "members": [
++        {
++          "name": "command-line",
++          "type": "str"
++        },
++        {
++          "name": "cpu-index",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "str",
++      "json-type": "string",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "84",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "head",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "events",
++          "type": "[238]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "85",
++      "members": [
++        {
++          "name": "val",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "cpu-index",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "86",
++      "members": [
++        {
++          "name": "uri",
++          "type": "str"
++        },
++        {
++          "name": "blk",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "inc",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "detach",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "87",
++      "members": [
++        {
++          "name": "state",
++          "type": "193"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "88",
++      "members": [
++        {
++          "name": "uri",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "89",
++      "members": [
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "90",
++      "members": [
++        {
++          "name": "capabilities",
++          "type": "[140]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "91",
++      "members": [
++        {
++          "name": "compress-level",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "compress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "decompress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-initial",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-increment",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "239"
++        },
++        {
++          "name": "tls-hostname",
++          "default": null,
++          "type": "239"
++        },
++        {
++          "name": "max-bandwidth",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "downtime-limit",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-checkpoint-delay",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "block-incremental",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "x-multifd-channels",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-multifd-page-count",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "xbzrle-cache-size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "92",
++      "members": [
++        {
++          "name": "value",
++          "type": "number"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "93",
++      "members": [
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "94",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "writable",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "95",
++      "members": [
++        {
++          "name": "addr",
++          "type": "240"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "96",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "97",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "98",
++      "members": [
++        {
++          "name": "qom-type",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "99",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "100",
++      "members": [
++        {
++          "name": "val",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "101",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "property",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "any",
++      "json-type": "value",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "102",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[103]",
++      "element-type": "103",
++      "meta-type": "array"
++    },
++    {
++      "name": "103",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "104",
++      "members": [
++        {
++          "name": "implements",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "abstract",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[105]",
++      "element-type": "105",
++      "meta-type": "array"
++    },
++    {
++      "name": "105",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "abstract",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "parent",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "106",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "property",
++          "type": "str"
++        },
++        {
++          "name": "value",
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[107]",
++      "element-type": "107",
++      "meta-type": "array"
++    },
++    {
++      "name": "107",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "slot",
++          "type": "str"
++        },
++        {
++          "name": "slot-type",
++          "type": "241"
++        },
++        {
++          "name": "source",
++          "type": "int"
++        },
++        {
++          "name": "status",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "108",
++      "members": [
++        {
++          "name": "actual",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[109]",
++      "element-type": "109",
++      "meta-type": "array"
++    },
++    {
++      "name": "109",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "qdev",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "removable",
++          "type": "bool"
++        },
++        {
++          "name": "locked",
++          "type": "bool"
++        },
++        {
++          "name": "inserted",
++          "default": null,
++          "type": "143"
++        },
++        {
++          "name": "tray_open",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "io-status",
++          "default": null,
++          "type": "242"
++        },
++        {
++          "name": "dirty-bitmaps",
++          "default": null,
++          "type": "[243]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[110]",
++      "element-type": "110",
++      "meta-type": "array"
++    },
++    {
++      "name": "110",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "busy",
++          "type": "bool"
++        },
++        {
++          "name": "paused",
++          "type": "bool"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        },
++        {
++          "name": "io-status",
++          "type": "242"
++        },
++        {
++          "name": "ready",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "111",
++      "members": [
++        {
++          "name": "query-nodes",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[112]",
++      "element-type": "112",
++      "meta-type": "array"
++    },
++    {
++      "name": "112",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "stats",
++          "type": "244"
++        },
++        {
++          "name": "parent",
++          "default": null,
++          "type": "112"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "112"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[113]",
++      "element-type": "113",
++      "meta-type": "array"
++    },
++    {
++      "name": "113",
++      "members": [
++        {
++          "name": "label",
++          "type": "str"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "frontend-open",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[114]",
++      "element-type": "114",
++      "meta-type": "array"
++    },
++    {
++      "name": "114",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "115",
++      "members": [
++        {
++          "name": "option",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[116]",
++      "element-type": "116",
++      "meta-type": "array"
++    },
++    {
++      "name": "116",
++      "members": [
++        {
++          "name": "option",
++          "type": "str"
++        },
++        {
++          "name": "parameters",
++          "type": "[245]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[117]",
++      "element-type": "117",
++      "meta-type": "array"
++    },
++    {
++      "name": "117",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[118]",
++      "element-type": "118",
++      "meta-type": "array"
++    },
++    {
++      "name": "118",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "migration-safe",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "static",
++          "type": "bool"
++        },
++        {
++          "name": "unavailable-features",
++          "default": null,
++          "type": "[str]"
++        },
++        {
++          "name": "typename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "119",
++      "members": [
++        {
++          "name": "modela",
++          "type": "246"
++        },
++        {
++          "name": "modelb",
++          "type": "246"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "120",
++      "members": [
++        {
++          "name": "model",
++          "type": "246"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "121",
++      "members": [
++        {
++          "name": "modela",
++          "type": "246"
++        },
++        {
++          "name": "modelb",
++          "type": "246"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "122",
++      "members": [
++        {
++          "name": "result",
++          "type": "247"
++        },
++        {
++          "name": "responsible-properties",
++          "type": "[str]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "123",
++      "members": [
++        {
++          "name": "type",
++          "type": "248"
++        },
++        {
++          "name": "model",
++          "type": "246"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "124",
++      "members": [
++        {
++          "name": "model",
++          "type": "246"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[125]",
++      "element-type": "125",
++      "meta-type": "array"
++    },
++    {
++      "name": "125",
++      "tag": "arch",
++      "variants": [
++        {
++          "case": "x86",
++          "type": "251"
++        },
++        {
++          "case": "sparc",
++          "type": "252"
++        },
++        {
++          "case": "ppc",
++          "type": "253"
++        },
++        {
++          "case": "mips",
++          "type": "254"
++        },
++        {
++          "case": "tricore",
++          "type": "255"
++        },
++        {
++          "case": "other",
++          "type": "256"
++        }
++      ],
++      "members": [
++        {
++          "name": "CPU",
++          "type": "int"
++        },
++        {
++          "name": "current",
++          "type": "bool"
++        },
++        {
++          "name": "halted",
++          "type": "bool"
++        },
++        {
++          "name": "qom_path",
++          "type": "str"
++        },
++        {
++          "name": "thread_id",
++          "type": "int"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "249"
++        },
++        {
++          "name": "arch",
++          "type": "250"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "126",
++      "members": [
++        {
++          "name": "status",
++          "type": "257"
++        },
++        {
++          "name": "completed",
++          "type": "int"
++        },
++        {
++          "name": "total",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "127",
++      "members": [
++        {
++          "name": "formats",
++          "type": "[237]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[128]",
++      "element-type": "128",
++      "meta-type": "array"
++    },
++    {
++      "name": "128",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[129]",
++      "element-type": "129",
++      "meta-type": "array"
++    },
++    {
++      "name": "129",
++      "members": [
++        {
++          "name": "fdset-id",
++          "type": "int"
++        },
++        {
++          "name": "fds",
++          "type": "[258]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[130]",
++      "element-type": "130",
++      "meta-type": "array"
++    },
++    {
++      "name": "130",
++      "members": [
++        {
++          "name": "version",
++          "type": "int"
++        },
++        {
++          "name": "emulated",
++          "type": "bool"
++        },
++        {
++          "name": "kernel",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[131]",
++      "element-type": "131",
++      "meta-type": "array"
++    },
++    {
++      "name": "131",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "vcpus-count",
++          "type": "int"
++        },
++        {
++          "name": "props",
++          "type": "249"
++        },
++        {
++          "name": "qom-path",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[132]",
++      "element-type": "132",
++      "meta-type": "array"
++    },
++    {
++      "name": "132",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "thread-id",
++          "type": "int"
++        },
++        {
++          "name": "poll-max-ns",
++          "type": "int"
++        },
++        {
++          "name": "poll-grow",
++          "type": "int"
++        },
++        {
++          "name": "poll-shrink",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "133",
++      "members": [
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "present",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[134]",
++      "element-type": "134",
++      "meta-type": "array"
++    },
++    {
++      "name": "134",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "alias",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "is-default",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "cpu-max",
++          "type": "int"
++        },
++        {
++          "name": "hotpluggable-cpus",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[135]",
++      "element-type": "135",
++      "meta-type": "array"
++    },
++    {
++      "name": "135",
++      "members": [
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "merge",
++          "type": "bool"
++        },
++        {
++          "name": "dump",
++          "type": "bool"
++        },
++        {
++          "name": "prealloc",
++          "type": "bool"
++        },
++        {
++          "name": "host-nodes",
++          "type": "[int]"
++        },
++        {
++          "name": "policy",
++          "type": "259"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[136]",
++      "element-type": "136",
++      "meta-type": "array"
++    },
++    {
++      "name": "136",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "dimm",
++          "type": "261"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "260"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "137",
++      "members": [
++        {
++          "name": "base-memory",
++          "type": "int"
++        },
++        {
++          "name": "plugged-memory",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[138]",
++      "element-type": "138",
++      "meta-type": "array"
++    },
++    {
++      "name": "138",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "index",
++          "type": "int"
++        },
++        {
++          "name": "current",
++          "type": "bool"
++        },
++        {
++          "name": "absolute",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "139",
++      "members": [
++        {
++          "name": "status",
++          "default": null,
++          "type": "193"
++        },
++        {
++          "name": "ram",
++          "default": null,
++          "type": "262"
++        },
++        {
++          "name": "disk",
++          "default": null,
++          "type": "262"
++        },
++        {
++          "name": "xbzrle-cache",
++          "default": null,
++          "type": "263"
++        },
++        {
++          "name": "total-time",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "expected-downtime",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "downtime",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "setup-time",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-percentage",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "error-desc",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "int",
++      "json-type": "int",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "[140]",
++      "element-type": "140",
++      "meta-type": "array"
++    },
++    {
++      "name": "140",
++      "members": [
++        {
++          "name": "capability",
++          "type": "264"
++        },
++        {
++          "name": "state",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "141",
++      "members": [
++        {
++          "name": "compress-level",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "compress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "decompress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-initial",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-increment",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "tls-hostname",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "max-bandwidth",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "downtime-limit",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-checkpoint-delay",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "block-incremental",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "x-multifd-channels",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-multifd-page-count",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "xbzrle-cache-size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "142",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[143]",
++      "element-type": "143",
++      "meta-type": "array"
++    },
++    {
++      "name": "143",
++      "members": [
++        {
++          "name": "file",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ro",
++          "type": "bool"
++        },
++        {
++          "name": "drv",
++          "type": "str"
++        },
++        {
++          "name": "backing_file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing_file_depth",
++          "type": "int"
++        },
++        {
++          "name": "encrypted",
++          "type": "bool"
++        },
++        {
++          "name": "encryption_key_missing",
++          "type": "bool"
++        },
++        {
++          "name": "detect_zeroes",
++          "type": "206"
++        },
++        {
++          "name": "bps",
++          "type": "int"
++        },
++        {
++          "name": "bps_rd",
++          "type": "int"
++        },
++        {
++          "name": "bps_wr",
++          "type": "int"
++        },
++        {
++          "name": "iops",
++          "type": "int"
++        },
++        {
++          "name": "iops_rd",
++          "type": "int"
++        },
++        {
++          "name": "iops_wr",
++          "type": "int"
++        },
++        {
++          "name": "image",
++          "type": "265"
++        },
++        {
++          "name": "bps_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cache",
++          "type": "266"
++        },
++        {
++          "name": "write_threshold",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[144]",
++      "element-type": "144",
++      "meta-type": "array"
++    },
++    {
++      "name": "144",
++      "members": [
++        {
++          "name": "bus",
++          "type": "int"
++        },
++        {
++          "name": "devices",
++          "type": "[267]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[145]",
++      "element-type": "145",
++      "meta-type": "array"
++    },
++    {
++      "name": "145",
++      "tag": "meta-type",
++      "variants": [
++        {
++          "case": "builtin",
++          "type": "269"
++        },
++        {
++          "case": "enum",
++          "type": "270"
++        },
++        {
++          "case": "array",
++          "type": "271"
++        },
++        {
++          "case": "object",
++          "type": "272"
++        },
++        {
++          "case": "alternate",
++          "type": "273"
++        },
++        {
++          "case": "command",
++          "type": "274"
++        },
++        {
++          "case": "event",
++          "type": "275"
++        }
++      ],
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "meta-type",
++          "type": "268"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "146",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "147",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "int"
++        },
++        {
++          "name": "ports",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "148",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "tbl-id",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[149]",
++      "element-type": "149",
++      "meta-type": "array"
++    },
++    {
++      "name": "149",
++      "members": [
++        {
++          "name": "cookie",
++          "type": "int"
++        },
++        {
++          "name": "hits",
++          "type": "int"
++        },
++        {
++          "name": "key",
++          "type": "276"
++        },
++        {
++          "name": "mask",
++          "type": "277"
++        },
++        {
++          "name": "action",
++          "type": "278"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "150",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[151]",
++      "element-type": "151",
++      "meta-type": "array"
++    },
++    {
++      "name": "151",
++      "members": [
++        {
++          "name": "id",
++          "type": "int"
++        },
++        {
++          "name": "type",
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "index",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "out-pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "set-vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "pop-vlan",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group-ids",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "set-eth-src",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "set-eth-dst",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ttl-check",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "152",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[153]",
++      "element-type": "153",
++      "meta-type": "array"
++    },
++    {
++      "name": "153",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "link-up",
++          "type": "bool"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        },
++        {
++          "name": "duplex",
++          "type": "279"
++        },
++        {
++          "name": "autoneg",
++          "type": "280"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "154",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[155]",
++      "element-type": "155",
++      "meta-type": "array"
++    },
++    {
++      "name": "155",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "promiscuous",
++          "type": "bool"
++        },
++        {
++          "name": "multicast",
++          "type": "281"
++        },
++        {
++          "name": "unicast",
++          "type": "281"
++        },
++        {
++          "name": "vlan",
++          "type": "281"
++        },
++        {
++          "name": "broadcast-allowed",
++          "type": "bool"
++        },
++        {
++          "name": "multicast-overflow",
++          "type": "bool"
++        },
++        {
++          "name": "unicast-overflow",
++          "type": "bool"
++        },
++        {
++          "name": "main-mac",
++          "type": "str"
++        },
++        {
++          "name": "vlan-table",
++          "type": "[int]"
++        },
++        {
++          "name": "unicast-table",
++          "type": "[str]"
++        },
++        {
++          "name": "multicast-table",
++          "type": "[str]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "156",
++      "members": [
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "migrated",
++          "type": "bool"
++        },
++        {
++          "name": "host",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-port",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "auth",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "compiled-version",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "mouse-mode",
++          "type": "282"
++        },
++        {
++          "name": "channels",
++          "default": null,
++          "type": "[197]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "157",
++      "members": [
++        {
++          "name": "running",
++          "type": "bool"
++        },
++        {
++          "name": "singlestep",
++          "type": "bool"
++        },
++        {
++          "name": "status",
++          "type": "283"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "158",
++      "members": [
++        {
++          "name": "arch",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[159]",
++      "element-type": "159",
++      "meta-type": "array"
++    },
++    {
++      "name": "159",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "model",
++          "type": "160"
++        },
++        {
++          "name": "options",
++          "type": "284"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[160]",
++      "element-type": "160",
++      "meta-type": "array"
++    },
++    {
++      "name": "160",
++      "meta-type": "enum",
++      "values": [
++        "tpm-tis"
++      ]
++    },
++    {
++      "name": "[161]",
++      "element-type": "161",
++      "meta-type": "array"
++    },
++    {
++      "name": "161",
++      "meta-type": "enum",
++      "values": [
++        "passthrough",
++        "emulator"
++      ]
++    },
++    {
++      "name": "162",
++      "members": [
++        {
++          "name": "UUID",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "163",
++      "members": [
++        {
++          "name": "qemu",
++          "type": "285"
++        },
++        {
++          "name": "package",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "164",
++      "members": [
++        {
++          "name": "guid",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "165",
++      "members": [
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "host",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "default": null,
++          "type": "286"
++        },
++        {
++          "name": "service",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "auth",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "clients",
++          "default": null,
++          "type": "[200]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[166]",
++      "element-type": "166",
++      "meta-type": "array"
++    },
++    {
++      "name": "166",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "type": "[287]"
++        },
++        {
++          "name": "clients",
++          "type": "[200]"
++        },
++        {
++          "name": "auth",
++          "type": "288"
++        },
++        {
++          "name": "vencrypt",
++          "default": null,
++          "type": "289"
++        },
++        {
++          "name": "display",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "167",
++      "members": [
++        {
++          "name": "error",
++          "type": "bool"
++        },
++        {
++          "name": "desc",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "168",
++      "members": [
++        {
++          "name": "fdset-id",
++          "type": "int"
++        },
++        {
++          "name": "fd",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "169",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "290"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "170",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "data",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "290"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "171",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "172",
++      "members": [
++        {
++          "name": "keys",
++          "type": "[291]"
++        },
++        {
++          "name": "hold-time",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "173",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "up",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "174",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "password",
++          "type": "str"
++        },
++        {
++          "name": "connected",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "175",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "vcpu",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[176]",
++      "element-type": "176",
++      "meta-type": "array"
++    },
++    {
++      "name": "176",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "state",
++          "type": "292"
++        },
++        {
++          "name": "vcpu",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "177",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "enable",
++          "type": "bool"
++        },
++        {
++          "name": "ignore-unavailable",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "vcpu",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "178",
++      "members": [
++        {
++          "name": "actions",
++          "type": "[293]"
++        },
++        {
++          "name": "properties",
++          "default": null,
++          "type": "294"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "179",
++      "members": [
++        {
++          "name": "action",
++          "type": "201"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "180",
++      "members": [
++        {
++          "name": "parent",
++          "type": "str"
++        },
++        {
++          "name": "child",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "181",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "182",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "183",
++      "members": [
++        {
++          "name": "sha256",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "184",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "185",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "live",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "186",
++      "members": [
++        {
++          "name": "enable",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "187",
++      "members": [
++        {
++          "name": "enable",
++          "type": "bool"
++        },
++        {
++          "name": "primary",
++          "type": "bool"
++        },
++        {
++          "name": "failover",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "bool",
++      "json-type": "boolean",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "188",
++      "meta-type": "enum",
++      "values": [
++        "read",
++        "write"
++      ]
++    },
++    {
++      "name": "189",
++      "meta-type": "enum",
++      "values": [
++        "ignore",
++        "report",
++        "stop"
++      ]
++    },
++    {
++      "name": "190",
++      "meta-type": "enum",
++      "values": [
++        "commit",
++        "stream",
++        "mirror",
++        "backup"
++      ]
++    },
++    {
++      "name": "191",
++      "meta-type": "enum",
++      "values": [
++        "pause",
++        "poweroff"
++      ]
++    },
++    {
++      "name": "192",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "hyper-v",
++          "type": "296"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "295"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "193",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "setup",
++        "cancelling",
++        "cancelled",
++        "active",
++        "postcopy-active",
++        "completed",
++        "failed",
++        "colo",
++        "pre-switchover",
++        "device"
++      ]
++    },
++    {
++      "name": "194",
++      "meta-type": "enum",
++      "values": [
++        "read",
++        "write",
++        "flush"
++      ]
++    },
++    {
++      "name": "195",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "286"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "196",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "286"
++        },
++        {
++          "name": "auth",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "197",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "286"
++        },
++        {
++          "name": "connection-id",
++          "type": "int"
++        },
++        {
++          "name": "channel-type",
++          "type": "int"
++        },
++        {
++          "name": "channel-id",
++          "type": "int"
++        },
++        {
++          "name": "tls",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "198",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "286"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        },
++        {
++          "name": "auth",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "199",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "286"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "200",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "286"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        },
++        {
++          "name": "x509_dname",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sasl_username",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "201",
++      "meta-type": "enum",
++      "values": [
++        "reset",
++        "shutdown",
++        "poweroff",
++        "pause",
++        "debug",
++        "none",
++        "inject-nmi"
++      ]
++    },
++    {
++      "name": "202",
++      "meta-type": "enum",
++      "values": [
++        "report",
++        "ignore",
++        "enospc",
++        "stop",
++        "auto"
++      ]
++    },
++    {
++      "name": "203",
++      "meta-type": "enum",
++      "values": [
++        "blkdebug",
++        "blkverify",
++        "bochs",
++        "cloop",
++        "dmg",
++        "file",
++        "ftp",
++        "ftps",
++        "gluster",
++        "host_cdrom",
++        "host_device",
++        "http",
++        "https",
++        "iscsi",
++        "luks",
++        "nbd",
++        "nfs",
++        "null-aio",
++        "null-co",
++        "parallels",
++        "qcow",
++        "qcow2",
++        "qed",
++        "quorum",
++        "raw",
++        "rbd",
++        "replication",
++        "sheepdog",
++        "ssh",
++        "throttle",
++        "vdi",
++        "vhdx",
++        "vmdk",
++        "vpc",
++        "vvfat",
++        "vxhs"
++      ]
++    },
++    {
++      "name": "204",
++      "meta-type": "enum",
++      "values": [
++        "ignore",
++        "unmap"
++      ]
++    },
++    {
++      "name": "205",
++      "members": [
++        {
++          "name": "direct",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "no-flush",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "206",
++      "meta-type": "enum",
++      "values": [
++        "off",
++        "on",
++        "unmap"
++      ]
++    },
++    {
++      "name": "207",
++      "members": [
++        {
++          "name": "image",
++          "type": "297"
++        },
++        {
++          "name": "config",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "align",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-transfer",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "opt-write-zero",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-write-zero",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "opt-discard",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-discard",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "inject-error",
++          "default": null,
++          "type": "[298]"
++        },
++        {
++          "name": "set-state",
++          "default": null,
++          "type": "[299]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "208",
++      "members": [
++        {
++          "name": "test",
++          "type": "297"
++        },
++        {
++          "name": "raw",
++          "type": "297"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "209",
++      "members": [
++        {
++          "name": "file",
++          "type": "297"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "210",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "pr-manager",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "locking",
++          "default": null,
++          "type": "300"
++        },
++        {
++          "name": "aio",
++          "default": null,
++          "type": "301"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "211",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "212",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sslverify",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "213",
++      "members": [
++        {
++          "name": "volume",
++          "type": "str"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "type": "[302]"
++        },
++        {
++          "name": "debug",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "214",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cookie",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cookie-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "215",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cookie",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sslverify",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "cookie-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "216",
++      "members": [
++        {
++          "name": "transport",
++          "type": "303"
++        },
++        {
++          "name": "portal",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "lun",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "initiator-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "header-digest",
++          "default": null,
++          "type": "304"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "217",
++      "members": [
++        {
++          "name": "file",
++          "type": "297"
++        },
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "218",
++      "members": [
++        {
++          "name": "server",
++          "type": "302"
++        },
++        {
++          "name": "export",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "219",
++      "members": [
++        {
++          "name": "server",
++          "type": "305"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tcp-syn-count",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "readahead-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "page-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "debug",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "220",
++      "members": [
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "latency-ns",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "221",
++      "members": [
++        {
++          "name": "file",
++          "type": "297"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "306"
++        },
++        {
++          "name": "lazy-refcounts",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "pass-discard-request",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "pass-discard-snapshot",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "pass-discard-other",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "overlap-check",
++          "default": null,
++          "type": "307"
++        },
++        {
++          "name": "cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "l2-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "refcount-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cache-clean-interval",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "308"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "222",
++      "members": [
++        {
++          "name": "file",
++          "type": "297"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "306"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "309"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "223",
++      "members": [
++        {
++          "name": "file",
++          "type": "297"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "306"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "224",
++      "members": [
++        {
++          "name": "blkverify",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "children",
++          "type": "[297]"
++        },
++        {
++          "name": "vote-threshold",
++          "type": "int"
++        },
++        {
++          "name": "rewrite-corrupted",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "read-pattern",
++          "default": null,
++          "type": "310"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "225",
++      "members": [
++        {
++          "name": "file",
++          "type": "297"
++        },
++        {
++          "name": "offset",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "226",
++      "members": [
++        {
++          "name": "pool",
++          "type": "str"
++        },
++        {
++          "name": "image",
++          "type": "str"
++        },
++        {
++          "name": "conf",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "snapshot",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "default": null,
++          "type": "[311]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "227",
++      "members": [
++        {
++          "name": "file",
++          "type": "297"
++        },
++        {
++          "name": "mode",
++          "type": "312"
++        },
++        {
++          "name": "top-id",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "228",
++      "members": [
++        {
++          "name": "server",
++          "type": "302"
++        },
++        {
++          "name": "vdi",
++          "type": "str"
++        },
++        {
++          "name": "snap-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tag",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "229",
++      "members": [
++        {
++          "name": "server",
++          "type": "313"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "230",
++      "members": [
++        {
++          "name": "throttle-group",
++          "type": "str"
++        },
++        {
++          "name": "file",
++          "type": "297"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "231",
++      "members": [
++        {
++          "name": "dir",
++          "type": "str"
++        },
++        {
++          "name": "fat-type",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "floppy",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "label",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "rw",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "232",
++      "members": [
++        {
++          "name": "vdisk-id",
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "type": "311"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "233",
++      "meta-type": "enum",
++      "values": [
++        "top",
++        "full",
++        "none",
++        "incremental"
++      ]
++    },
++    {
++      "name": "234",
++      "meta-type": "enum",
++      "values": [
++        "retain",
++        "read-only",
++        "read-write"
++      ]
++    },
++    {
++      "name": "235",
++      "meta-type": "enum",
++      "values": [
++        "existing",
++        "absolute-paths"
++      ]
++    },
++    {
++      "name": "236",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "file",
++          "type": "315"
++        },
++        {
++          "case": "serial",
++          "type": "316"
++        },
++        {
++          "case": "parallel",
++          "type": "316"
++        },
++        {
++          "case": "pipe",
++          "type": "316"
++        },
++        {
++          "case": "socket",
++          "type": "317"
++        },
++        {
++          "case": "udp",
++          "type": "318"
++        },
++        {
++          "case": "pty",
++          "type": "319"
++        },
++        {
++          "case": "null",
++          "type": "319"
++        },
++        {
++          "case": "mux",
++          "type": "320"
++        },
++        {
++          "case": "msmouse",
++          "type": "319"
++        },
++        {
++          "case": "wctablet",
++          "type": "319"
++        },
++        {
++          "case": "braille",
++          "type": "319"
++        },
++        {
++          "case": "testdev",
++          "type": "319"
++        },
++        {
++          "case": "stdio",
++          "type": "321"
++        },
++        {
++          "case": "console",
++          "type": "319"
++        },
++        {
++          "case": "spicevmc",
++          "type": "322"
++        },
++        {
++          "case": "spiceport",
++          "type": "323"
++        },
++        {
++          "case": "vc",
++          "type": "324"
++        },
++        {
++          "case": "ringbuf",
++          "type": "325"
++        },
++        {
++          "case": "memory",
++          "type": "325"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "314"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "237",
++      "meta-type": "enum",
++      "values": [
++        "elf",
++        "kdump-zlib",
++        "kdump-lzo",
++        "kdump-snappy"
++      ]
++    },
++    {
++      "name": "[238]",
++      "element-type": "238",
++      "meta-type": "array"
++    },
++    {
++      "name": "238",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "key",
++          "type": "327"
++        },
++        {
++          "case": "btn",
++          "type": "328"
++        },
++        {
++          "case": "rel",
++          "type": "329"
++        },
++        {
++          "case": "abs",
++          "type": "329"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "326"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "239",
++      "members": [
++        {
++          "type": "str"
++        },
++        {
++          "type": "null"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "number",
++      "json-type": "number",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "240",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "inet",
++          "type": "331"
++        },
++        {
++          "case": "unix",
++          "type": "332"
++        },
++        {
++          "case": "vsock",
++          "type": "333"
++        },
++        {
++          "case": "fd",
++          "type": "334"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "330"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "241",
++      "meta-type": "enum",
++      "values": [
++        "DIMM",
++        "CPU"
++      ]
++    },
++    {
++      "name": "242",
++      "meta-type": "enum",
++      "values": [
++        "ok",
++        "failed",
++        "nospace"
++      ]
++    },
++    {
++      "name": "[243]",
++      "element-type": "243",
++      "meta-type": "array"
++    },
++    {
++      "name": "243",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "count",
++          "type": "int"
++        },
++        {
++          "name": "granularity",
++          "type": "int"
++        },
++        {
++          "name": "status",
++          "type": "335"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "244",
++      "members": [
++        {
++          "name": "rd_bytes",
++          "type": "int"
++        },
++        {
++          "name": "wr_bytes",
++          "type": "int"
++        },
++        {
++          "name": "rd_operations",
++          "type": "int"
++        },
++        {
++          "name": "wr_operations",
++          "type": "int"
++        },
++        {
++          "name": "flush_operations",
++          "type": "int"
++        },
++        {
++          "name": "flush_total_time_ns",
++          "type": "int"
++        },
++        {
++          "name": "wr_total_time_ns",
++          "type": "int"
++        },
++        {
++          "name": "rd_total_time_ns",
++          "type": "int"
++        },
++        {
++          "name": "wr_highest_offset",
++          "type": "int"
++        },
++        {
++          "name": "rd_merged",
++          "type": "int"
++        },
++        {
++          "name": "wr_merged",
++          "type": "int"
++        },
++        {
++          "name": "idle_time_ns",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "failed_rd_operations",
++          "type": "int"
++        },
++        {
++          "name": "failed_wr_operations",
++          "type": "int"
++        },
++        {
++          "name": "failed_flush_operations",
++          "type": "int"
++        },
++        {
++          "name": "invalid_rd_operations",
++          "type": "int"
++        },
++        {
++          "name": "invalid_wr_operations",
++          "type": "int"
++        },
++        {
++          "name": "invalid_flush_operations",
++          "type": "int"
++        },
++        {
++          "name": "account_invalid",
++          "type": "bool"
++        },
++        {
++          "name": "account_failed",
++          "type": "bool"
++        },
++        {
++          "name": "timed_stats",
++          "type": "[336]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[245]",
++      "element-type": "245",
++      "meta-type": "array"
++    },
++    {
++      "name": "245",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "337"
++        },
++        {
++          "name": "help",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "default",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[str]",
++      "element-type": "str",
++      "meta-type": "array"
++    },
++    {
++      "name": "246",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "247",
++      "meta-type": "enum",
++      "values": [
++        "incompatible",
++        "identical",
++        "superset",
++        "subset"
++      ]
++    },
++    {
++      "name": "248",
++      "meta-type": "enum",
++      "values": [
++        "static",
++        "full"
++      ]
++    },
++    {
++      "name": "249",
++      "members": [
++        {
++          "name": "node-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "socket-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "core-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "thread-id",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "250",
++      "meta-type": "enum",
++      "values": [
++        "x86",
++        "sparc",
++        "ppc",
++        "mips",
++        "tricore",
++        "other"
++      ]
++    },
++    {
++      "name": "251",
++      "members": [
++        {
++          "name": "pc",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "252",
++      "members": [
++        {
++          "name": "pc",
++          "type": "int"
++        },
++        {
++          "name": "npc",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "253",
++      "members": [
++        {
++          "name": "nip",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "254",
++      "members": [
++        {
++          "name": "PC",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "255",
++      "members": [
++        {
++          "name": "PC",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "256",
++      "members": [
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "257",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "active",
++        "completed",
++        "failed"
++      ]
++    },
++    {
++      "name": "[237]",
++      "element-type": "237",
++      "meta-type": "array"
++    },
++    {
++      "name": "[258]",
++      "element-type": "258",
++      "meta-type": "array"
++    },
++    {
++      "name": "258",
++      "members": [
++        {
++          "name": "fd",
++          "type": "int"
++        },
++        {
++          "name": "opaque",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[int]",
++      "element-type": "int",
++      "meta-type": "array"
++    },
++    {
++      "name": "259",
++      "meta-type": "enum",
++      "values": [
++        "default",
++        "preferred",
++        "bind",
++        "interleave"
++      ]
++    },
++    {
++      "name": "260",
++      "meta-type": "enum",
++      "values": [
++        "dimm"
++      ]
++    },
++    {
++      "name": "261",
++      "members": [
++        {
++          "name": "data",
++          "type": "338"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "262",
++      "members": [
++        {
++          "name": "transferred",
++          "type": "int"
++        },
++        {
++          "name": "remaining",
++          "type": "int"
++        },
++        {
++          "name": "total",
++          "type": "int"
++        },
++        {
++          "name": "duplicate",
++          "type": "int"
++        },
++        {
++          "name": "skipped",
++          "type": "int"
++        },
++        {
++          "name": "normal",
++          "type": "int"
++        },
++        {
++          "name": "normal-bytes",
++          "type": "int"
++        },
++        {
++          "name": "dirty-pages-rate",
++          "type": "int"
++        },
++        {
++          "name": "mbps",
++          "type": "number"
++        },
++        {
++          "name": "dirty-sync-count",
++          "type": "int"
++        },
++        {
++          "name": "postcopy-requests",
++          "type": "int"
++        },
++        {
++          "name": "page-size",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "263",
++      "members": [
++        {
++          "name": "cache-size",
++          "type": "int"
++        },
++        {
++          "name": "bytes",
++          "type": "int"
++        },
++        {
++          "name": "pages",
++          "type": "int"
++        },
++        {
++          "name": "cache-miss",
++          "type": "int"
++        },
++        {
++          "name": "cache-miss-rate",
++          "type": "number"
++        },
++        {
++          "name": "overflow",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "264",
++      "meta-type": "enum",
++      "values": [
++        "xbzrle",
++        "rdma-pin-all",
++        "auto-converge",
++        "zero-blocks",
++        "compress",
++        "events",
++        "postcopy-ram",
++        "x-colo",
++        "release-ram",
++        "block",
++        "return-path",
++        "pause-before-switchover",
++        "x-multifd"
++      ]
++    },
++    {
++      "name": "265",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "type": "str"
++        },
++        {
++          "name": "dirty-flag",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "actual-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "virtual-size",
++          "type": "int"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "encrypted",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "compressed",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "backing-filename",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "full-backing-filename",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-filename-format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "snapshots",
++          "default": null,
++          "type": "[57]"
++        },
++        {
++          "name": "backing-image",
++          "default": null,
++          "type": "265"
++        },
++        {
++          "name": "format-specific",
++          "default": null,
++          "type": "339"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "266",
++      "members": [
++        {
++          "name": "writeback",
++          "type": "bool"
++        },
++        {
++          "name": "direct",
++          "type": "bool"
++        },
++        {
++          "name": "no-flush",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[267]",
++      "element-type": "267",
++      "meta-type": "array"
++    },
++    {
++      "name": "267",
++      "members": [
++        {
++          "name": "bus",
++          "type": "int"
++        },
++        {
++          "name": "slot",
++          "type": "int"
++        },
++        {
++          "name": "function",
++          "type": "int"
++        },
++        {
++          "name": "class_info",
++          "type": "340"
++        },
++        {
++          "name": "id",
++          "type": "341"
++        },
++        {
++          "name": "irq",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "qdev_id",
++          "type": "str"
++        },
++        {
++          "name": "pci_bridge",
++          "default": null,
++          "type": "342"
++        },
++        {
++          "name": "regions",
++          "type": "[343]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "268",
++      "meta-type": "enum",
++      "values": [
++        "builtin",
++        "enum",
++        "array",
++        "object",
++        "alternate",
++        "command",
++        "event"
++      ]
++    },
++    {
++      "name": "269",
++      "members": [
++        {
++          "name": "json-type",
++          "type": "344"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "270",
++      "members": [
++        {
++          "name": "values",
++          "type": "[str]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "271",
++      "members": [
++        {
++          "name": "element-type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "272",
++      "members": [
++        {
++          "name": "members",
++          "type": "[345]"
++        },
++        {
++          "name": "tag",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "variants",
++          "default": null,
++          "type": "[346]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "273",
++      "members": [
++        {
++          "name": "members",
++          "type": "[347]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "274",
++      "members": [
++        {
++          "name": "arg-type",
++          "type": "str"
++        },
++        {
++          "name": "ret-type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "275",
++      "members": [
++        {
++          "name": "arg-type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "276",
++      "members": [
++        {
++          "name": "priority",
++          "type": "int"
++        },
++        {
++          "name": "tbl-id",
++          "type": "int"
++        },
++        {
++          "name": "in-pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tunnel-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "eth-type",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "eth-src",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "eth-dst",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ip-proto",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ip-tos",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ip-dst",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "277",
++      "members": [
++        {
++          "name": "in-pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tunnel-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "eth-src",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "eth-dst",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ip-proto",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ip-tos",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "278",
++      "members": [
++        {
++          "name": "goto-tbl",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tunnel-lport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "new-vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "out-pport",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "279",
++      "meta-type": "enum",
++      "values": [
++        "half",
++        "full"
++      ]
++    },
++    {
++      "name": "280",
++      "meta-type": "enum",
++      "values": [
++        "off",
++        "on"
++      ]
++    },
++    {
++      "name": "281",
++      "meta-type": "enum",
++      "values": [
++        "normal",
++        "none",
++        "all"
++      ]
++    },
++    {
++      "name": "282",
++      "meta-type": "enum",
++      "values": [
++        "client",
++        "server",
++        "unknown"
++      ]
++    },
++    {
++      "name": "[197]",
++      "element-type": "197",
++      "meta-type": "array"
++    },
++    {
++      "name": "283",
++      "meta-type": "enum",
++      "values": [
++        "debug",
++        "inmigrate",
++        "internal-error",
++        "io-error",
++        "paused",
++        "postmigrate",
++        "prelaunch",
++        "finish-migrate",
++        "restore-vm",
++        "running",
++        "save-vm",
++        "shutdown",
++        "suspended",
++        "watchdog",
++        "guest-panicked",
++        "colo"
++      ]
++    },
++    {
++      "name": "284",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "passthrough",
++          "type": "349"
++        },
++        {
++          "case": "emulator",
++          "type": "350"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "348"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "285",
++      "members": [
++        {
++          "name": "major",
++          "type": "int"
++        },
++        {
++          "name": "minor",
++          "type": "int"
++        },
++        {
++          "name": "micro",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "286",
++      "meta-type": "enum",
++      "values": [
++        "ipv4",
++        "ipv6",
++        "unix",
++        "vsock",
++        "unknown"
++      ]
++    },
++    {
++      "name": "[200]",
++      "element-type": "200",
++      "meta-type": "array"
++    },
++    {
++      "name": "[287]",
++      "element-type": "287",
++      "meta-type": "array"
++    },
++    {
++      "name": "287",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "286"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        },
++        {
++          "name": "auth",
++          "type": "288"
++        },
++        {
++          "name": "vencrypt",
++          "default": null,
++          "type": "289"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "288",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "vnc",
++        "ra2",
++        "ra2ne",
++        "tight",
++        "ultra",
++        "tls",
++        "vencrypt",
++        "sasl"
++      ]
++    },
++    {
++      "name": "289",
++      "meta-type": "enum",
++      "values": [
++        "plain",
++        "tls-none",
++        "x509-none",
++        "tls-vnc",
++        "x509-vnc",
++        "tls-plain",
++        "x509-plain",
++        "tls-sasl",
++        "x509-sasl"
++      ]
++    },
++    {
++      "name": "290",
++      "meta-type": "enum",
++      "values": [
++        "utf8",
++        "base64"
++      ]
++    },
++    {
++      "name": "[291]",
++      "element-type": "291",
++      "meta-type": "array"
++    },
++    {
++      "name": "291",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "number",
++          "type": "352"
++        },
++        {
++          "case": "qcode",
++          "type": "353"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "351"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "292",
++      "meta-type": "enum",
++      "values": [
++        "unavailable",
++        "disabled",
++        "enabled"
++      ]
++    },
++    {
++      "name": "[293]",
++      "element-type": "293",
++      "meta-type": "array"
++    },
++    {
++      "name": "293",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "abort",
++          "type": "355"
++        },
++        {
++          "case": "block-dirty-bitmap-add",
++          "type": "356"
++        },
++        {
++          "case": "block-dirty-bitmap-clear",
++          "type": "357"
++        },
++        {
++          "case": "blockdev-backup",
++          "type": "358"
++        },
++        {
++          "case": "blockdev-snapshot",
++          "type": "359"
++        },
++        {
++          "case": "blockdev-snapshot-internal-sync",
++          "type": "360"
++        },
++        {
++          "case": "blockdev-snapshot-sync",
++          "type": "361"
++        },
++        {
++          "case": "drive-backup",
++          "type": "362"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "354"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "294",
++      "members": [
++        {
++          "name": "completion-mode",
++          "default": null,
++          "type": "363"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "295",
++      "meta-type": "enum",
++      "values": [
++        "hyper-v"
++      ]
++    },
++    {
++      "name": "296",
++      "members": [
++        {
++          "name": "arg1",
++          "type": "int"
++        },
++        {
++          "name": "arg2",
++          "type": "int"
++        },
++        {
++          "name": "arg3",
++          "type": "int"
++        },
++        {
++          "name": "arg4",
++          "type": "int"
++        },
++        {
++          "name": "arg5",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "297",
++      "members": [
++        {
++          "type": "48"
++        },
++        {
++          "type": "str"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "[298]",
++      "element-type": "298",
++      "meta-type": "array"
++    },
++    {
++      "name": "298",
++      "members": [
++        {
++          "name": "event",
++          "type": "364"
++        },
++        {
++          "name": "state",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "errno",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "sector",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "once",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "immediately",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[299]",
++      "element-type": "299",
++      "meta-type": "array"
++    },
++    {
++      "name": "299",
++      "members": [
++        {
++          "name": "event",
++          "type": "364"
++        },
++        {
++          "name": "state",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "new_state",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "300",
++      "meta-type": "enum",
++      "values": [
++        "auto",
++        "on",
++        "off"
++      ]
++    },
++    {
++      "name": "301",
++      "meta-type": "enum",
++      "values": [
++        "threads",
++        "native"
++      ]
++    },
++    {
++      "name": "[302]",
++      "element-type": "302",
++      "meta-type": "array"
++    },
++    {
++      "name": "302",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "inet",
++          "type": "313"
++        },
++        {
++          "case": "unix",
++          "type": "366"
++        },
++        {
++          "case": "vsock",
++          "type": "367"
++        },
++        {
++          "case": "fd",
++          "type": "368"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "365"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "303",
++      "meta-type": "enum",
++      "values": [
++        "tcp",
++        "iser"
++      ]
++    },
++    {
++      "name": "304",
++      "meta-type": "enum",
++      "values": [
++        "crc32c",
++        "none",
++        "crc32c-none",
++        "none-crc32c"
++      ]
++    },
++    {
++      "name": "305",
++      "members": [
++        {
++          "name": "type",
++          "type": "369"
++        },
++        {
++          "name": "host",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "306",
++      "members": [
++        {
++          "type": "48"
++        },
++        {
++          "type": "str"
++        },
++        {
++          "type": "null"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "307",
++      "members": [
++        {
++          "type": "370"
++        },
++        {
++          "type": "371"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "308",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "aes",
++          "type": "373"
++        },
++        {
++          "case": "luks",
++          "type": "374"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "372"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "309",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "aes",
++          "type": "373"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "375"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[297]",
++      "element-type": "297",
++      "meta-type": "array"
++    },
++    {
++      "name": "310",
++      "meta-type": "enum",
++      "values": [
++        "quorum",
++        "fifo"
++      ]
++    },
++    {
++      "name": "[311]",
++      "element-type": "311",
++      "meta-type": "array"
++    },
++    {
++      "name": "311",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "312",
++      "meta-type": "enum",
++      "values": [
++        "primary",
++        "secondary"
++      ]
++    },
++    {
++      "name": "313",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        },
++        {
++          "name": "numeric",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "to",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ipv4",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "ipv6",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "314",
++      "meta-type": "enum",
++      "values": [
++        "file",
++        "serial",
++        "parallel",
++        "pipe",
++        "socket",
++        "udp",
++        "pty",
++        "null",
++        "mux",
++        "msmouse",
++        "wctablet",
++        "braille",
++        "testdev",
++        "stdio",
++        "console",
++        "spicevmc",
++        "spiceport",
++        "vc",
++        "ringbuf",
++        "memory"
++      ]
++    },
++    {
++      "name": "315",
++      "members": [
++        {
++          "name": "data",
++          "type": "376"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "316",
++      "members": [
++        {
++          "name": "data",
++          "type": "377"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "317",
++      "members": [
++        {
++          "name": "data",
++          "type": "378"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "318",
++      "members": [
++        {
++          "name": "data",
++          "type": "379"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "319",
++      "members": [
++        {
++          "name": "data",
++          "type": "380"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "320",
++      "members": [
++        {
++          "name": "data",
++          "type": "381"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "321",
++      "members": [
++        {
++          "name": "data",
++          "type": "382"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "322",
++      "members": [
++        {
++          "name": "data",
++          "type": "383"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "323",
++      "members": [
++        {
++          "name": "data",
++          "type": "384"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "324",
++      "members": [
++        {
++          "name": "data",
++          "type": "385"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "325",
++      "members": [
++        {
++          "name": "data",
++          "type": "386"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "326",
++      "meta-type": "enum",
++      "values": [
++        "key",
++        "btn",
++        "rel",
++        "abs"
++      ]
++    },
++    {
++      "name": "327",
++      "members": [
++        {
++          "name": "data",
++          "type": "387"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "328",
++      "members": [
++        {
++          "name": "data",
++          "type": "388"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "329",
++      "members": [
++        {
++          "name": "data",
++          "type": "389"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "null",
++      "json-type": "null",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "330",
++      "meta-type": "enum",
++      "values": [
++        "inet",
++        "unix",
++        "vsock",
++        "fd"
++      ]
++    },
++    {
++      "name": "331",
++      "members": [
++        {
++          "name": "data",
++          "type": "313"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "332",
++      "members": [
++        {
++          "name": "data",
++          "type": "366"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "333",
++      "members": [
++        {
++          "name": "data",
++          "type": "367"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "334",
++      "members": [
++        {
++          "name": "data",
++          "type": "368"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "335",
++      "meta-type": "enum",
++      "values": [
++        "active",
++        "disabled",
++        "frozen"
++      ]
++    },
++    {
++      "name": "[336]",
++      "element-type": "336",
++      "meta-type": "array"
++    },
++    {
++      "name": "336",
++      "members": [
++        {
++          "name": "interval_length",
++          "type": "int"
++        },
++        {
++          "name": "min_rd_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "max_rd_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_rd_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "min_wr_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "max_wr_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_wr_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "min_flush_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "max_flush_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_flush_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_rd_queue_depth",
++          "type": "number"
++        },
++        {
++          "name": "avg_wr_queue_depth",
++          "type": "number"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "337",
++      "meta-type": "enum",
++      "values": [
++        "string",
++        "boolean",
++        "number",
++        "size"
++      ]
++    },
++    {
++      "name": "338",
++      "members": [
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "addr",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "slot",
++          "type": "int"
++        },
++        {
++          "name": "node",
++          "type": "int"
++        },
++        {
++          "name": "memdev",
++          "type": "str"
++        },
++        {
++          "name": "hotplugged",
++          "type": "bool"
++        },
++        {
++          "name": "hotpluggable",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[57]",
++      "element-type": "57",
++      "meta-type": "array"
++    },
++    {
++      "name": "339",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "qcow2",
++          "type": "391"
++        },
++        {
++          "case": "vmdk",
++          "type": "392"
++        },
++        {
++          "case": "luks",
++          "type": "393"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "390"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "340",
++      "members": [
++        {
++          "name": "desc",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "class",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "341",
++      "members": [
++        {
++          "name": "device",
++          "type": "int"
++        },
++        {
++          "name": "vendor",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "342",
++      "members": [
++        {
++          "name": "bus",
++          "type": "394"
++        },
++        {
++          "name": "devices",
++          "default": null,
++          "type": "[267]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[343]",
++      "element-type": "343",
++      "meta-type": "array"
++    },
++    {
++      "name": "343",
++      "members": [
++        {
++          "name": "bar",
++          "type": "int"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "address",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "prefetch",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "mem_type_64",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "344",
++      "meta-type": "enum",
++      "values": [
++        "string",
++        "number",
++        "int",
++        "boolean",
++        "null",
++        "object",
++        "array",
++        "value"
++      ]
++    },
++    {
++      "name": "[345]",
++      "element-type": "345",
++      "meta-type": "array"
++    },
++    {
++      "name": "345",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "default",
++          "default": null,
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[346]",
++      "element-type": "346",
++      "meta-type": "array"
++    },
++    {
++      "name": "346",
++      "members": [
++        {
++          "name": "case",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[347]",
++      "element-type": "347",
++      "meta-type": "array"
++    },
++    {
++      "name": "347",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "348",
++      "meta-type": "enum",
++      "values": [
++        "passthrough",
++        "emulator"
++      ]
++    },
++    {
++      "name": "349",
++      "members": [
++        {
++          "name": "data",
++          "type": "395"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "350",
++      "members": [
++        {
++          "name": "data",
++          "type": "396"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "351",
++      "meta-type": "enum",
++      "values": [
++        "number",
++        "qcode"
++      ]
++    },
++    {
++      "name": "352",
++      "members": [
++        {
++          "name": "data",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "353",
++      "members": [
++        {
++          "name": "data",
++          "type": "397"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "354",
++      "meta-type": "enum",
++      "values": [
++        "abort",
++        "block-dirty-bitmap-add",
++        "block-dirty-bitmap-clear",
++        "blockdev-backup",
++        "blockdev-snapshot",
++        "blockdev-snapshot-internal-sync",
++        "blockdev-snapshot-sync",
++        "drive-backup"
++      ]
++    },
++    {
++      "name": "355",
++      "members": [
++        {
++          "name": "data",
++          "type": "398"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "356",
++      "members": [
++        {
++          "name": "data",
++          "type": "36"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "357",
++      "members": [
++        {
++          "name": "data",
++          "type": "37"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "358",
++      "members": [
++        {
++          "name": "data",
++          "type": "49"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "359",
++      "members": [
++        {
++          "name": "data",
++          "type": "55"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "360",
++      "members": [
++        {
++          "name": "data",
++          "type": "58"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "361",
++      "members": [
++        {
++          "name": "data",
++          "type": "59"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "362",
++      "members": [
++        {
++          "name": "data",
++          "type": "76"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "363",
++      "meta-type": "enum",
++      "values": [
++        "individual",
++        "grouped"
++      ]
++    },
++    {
++      "name": "364",
++      "meta-type": "enum",
++      "values": [
++        "l1_update",
++        "l1_grow_alloc_table",
++        "l1_grow_write_table",
++        "l1_grow_activate_table",
++        "l2_load",
++        "l2_update",
++        "l2_update_compressed",
++        "l2_alloc_cow_read",
++        "l2_alloc_write",
++        "read_aio",
++        "read_backing_aio",
++        "read_compressed",
++        "write_aio",
++        "write_compressed",
++        "vmstate_load",
++        "vmstate_save",
++        "cow_read",
++        "cow_write",
++        "reftable_load",
++        "reftable_grow",
++        "reftable_update",
++        "refblock_load",
++        "refblock_update",
++        "refblock_update_part",
++        "refblock_alloc",
++        "refblock_alloc_hookup",
++        "refblock_alloc_write",
++        "refblock_alloc_write_blocks",
++        "refblock_alloc_write_table",
++        "refblock_alloc_switch_table",
++        "cluster_alloc",
++        "cluster_alloc_bytes",
++        "cluster_free",
++        "flush_to_os",
++        "flush_to_disk",
++        "pwritev_rmw_head",
++        "pwritev_rmw_after_head",
++        "pwritev_rmw_tail",
++        "pwritev_rmw_after_tail",
++        "pwritev",
++        "pwritev_zero",
++        "pwritev_done",
++        "empty_image_prepare",
++        "l1_shrink_write_table",
++        "l1_shrink_free_l2_clusters",
++        "cor_write"
++      ]
++    },
++    {
++      "name": "365",
++      "meta-type": "enum",
++      "values": [
++        "inet",
++        "unix",
++        "vsock",
++        "fd"
++      ]
++    },
++    {
++      "name": "366",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "367",
++      "members": [
++        {
++          "name": "cid",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "368",
++      "members": [
++        {
++          "name": "str",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "369",
++      "meta-type": "enum",
++      "values": [
++        "inet"
++      ]
++    },
++    {
++      "name": "370",
++      "members": [
++        {
++          "name": "template",
++          "default": null,
++          "type": "371"
++        },
++        {
++          "name": "main-header",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "active-l1",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "active-l2",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-table",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-block",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "snapshot-table",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "inactive-l1",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "inactive-l2",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "371",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "constant",
++        "cached",
++        "all"
++      ]
++    },
++    {
++      "name": "372",
++      "meta-type": "enum",
++      "values": [
++        "aes",
++        "luks"
++      ]
++    },
++    {
++      "name": "373",
++      "members": [
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "374",
++      "members": [
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "375",
++      "meta-type": "enum",
++      "values": [
++        "aes"
++      ]
++    },
++    {
++      "name": "376",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "in",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "out",
++          "type": "str"
++        },
++        {
++          "name": "append",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "377",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "378",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "addr",
++          "type": "240"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "wait",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "nodelay",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "telnet",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "tn3270",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "reconnect",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "379",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "remote",
++          "type": "240"
++        },
++        {
++          "name": "local",
++          "default": null,
++          "type": "240"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "380",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "381",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "chardev",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "382",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "signal",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "383",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "384",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "fqdn",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "385",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "width",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "height",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cols",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "rows",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "386",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "387",
++      "members": [
++        {
++          "name": "key",
++          "type": "291"
++        },
++        {
++          "name": "down",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "388",
++      "members": [
++        {
++          "name": "button",
++          "type": "399"
++        },
++        {
++          "name": "down",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "389",
++      "members": [
++        {
++          "name": "axis",
++          "type": "400"
++        },
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "390",
++      "meta-type": "enum",
++      "values": [
++        "qcow2",
++        "vmdk",
++        "luks"
++      ]
++    },
++    {
++      "name": "391",
++      "members": [
++        {
++          "name": "data",
++          "type": "401"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "392",
++      "members": [
++        {
++          "name": "data",
++          "type": "402"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "393",
++      "members": [
++        {
++          "name": "data",
++          "type": "403"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "394",
++      "members": [
++        {
++          "name": "number",
++          "type": "int"
++        },
++        {
++          "name": "secondary",
++          "type": "int"
++        },
++        {
++          "name": "subordinate",
++          "type": "int"
++        },
++        {
++          "name": "io_range",
++          "type": "404"
++        },
++        {
++          "name": "memory_range",
++          "type": "404"
++        },
++        {
++          "name": "prefetchable_range",
++          "type": "404"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "395",
++      "members": [
++        {
++          "name": "path",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cancel-path",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "396",
++      "members": [
++        {
++          "name": "chardev",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "397",
++      "meta-type": "enum",
++      "values": [
++        "unmapped",
++        "shift",
++        "shift_r",
++        "alt",
++        "alt_r",
++        "ctrl",
++        "ctrl_r",
++        "menu",
++        "esc",
++        "1",
++        "2",
++        "3",
++        "4",
++        "5",
++        "6",
++        "7",
++        "8",
++        "9",
++        "0",
++        "minus",
++        "equal",
++        "backspace",
++        "tab",
++        "q",
++        "w",
++        "e",
++        "r",
++        "t",
++        "y",
++        "u",
++        "i",
++        "o",
++        "p",
++        "bracket_left",
++        "bracket_right",
++        "ret",
++        "a",
++        "s",
++        "d",
++        "f",
++        "g",
++        "h",
++        "j",
++        "k",
++        "l",
++        "semicolon",
++        "apostrophe",
++        "grave_accent",
++        "backslash",
++        "z",
++        "x",
++        "c",
++        "v",
++        "b",
++        "n",
++        "m",
++        "comma",
++        "dot",
++        "slash",
++        "asterisk",
++        "spc",
++        "caps_lock",
++        "f1",
++        "f2",
++        "f3",
++        "f4",
++        "f5",
++        "f6",
++        "f7",
++        "f8",
++        "f9",
++        "f10",
++        "num_lock",
++        "scroll_lock",
++        "kp_divide",
++        "kp_multiply",
++        "kp_subtract",
++        "kp_add",
++        "kp_enter",
++        "kp_decimal",
++        "sysrq",
++        "kp_0",
++        "kp_1",
++        "kp_2",
++        "kp_3",
++        "kp_4",
++        "kp_5",
++        "kp_6",
++        "kp_7",
++        "kp_8",
++        "kp_9",
++        "less",
++        "f11",
++        "f12",
++        "print",
++        "home",
++        "pgup",
++        "pgdn",
++        "end",
++        "left",
++        "up",
++        "down",
++        "right",
++        "insert",
++        "delete",
++        "stop",
++        "again",
++        "props",
++        "undo",
++        "front",
++        "copy",
++        "open",
++        "paste",
++        "find",
++        "cut",
++        "lf",
++        "help",
++        "meta_l",
++        "meta_r",
++        "compose",
++        "pause",
++        "ro",
++        "hiragana",
++        "henkan",
++        "yen",
++        "kp_comma",
++        "kp_equals",
++        "power",
++        "sleep",
++        "wake",
++        "audionext",
++        "audioprev",
++        "audiostop",
++        "audioplay",
++        "audiomute",
++        "volumeup",
++        "volumedown",
++        "mediaselect",
++        "mail",
++        "calculator",
++        "computer",
++        "ac_home",
++        "ac_back",
++        "ac_forward",
++        "ac_refresh",
++        "ac_bookmarks"
++      ]
++    },
++    {
++      "name": "398",
++      "members": [
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "399",
++      "meta-type": "enum",
++      "values": [
++        "left",
++        "middle",
++        "right",
++        "wheel-up",
++        "wheel-down",
++        "side",
++        "extra"
++      ]
++    },
++    {
++      "name": "400",
++      "meta-type": "enum",
++      "values": [
++        "x",
++        "y"
++      ]
++    },
++    {
++      "name": "401",
++      "members": [
++        {
++          "name": "compat",
++          "type": "str"
++        },
++        {
++          "name": "lazy-refcounts",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "corrupt",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-bits",
++          "type": "int"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "405"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "402",
++      "members": [
++        {
++          "name": "create-type",
++          "type": "str"
++        },
++        {
++          "name": "cid",
++          "type": "int"
++        },
++        {
++          "name": "parent-cid",
++          "type": "int"
++        },
++        {
++          "name": "extents",
++          "type": "[265]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "403",
++      "members": [
++        {
++          "name": "cipher-alg",
++          "type": "406"
++        },
++        {
++          "name": "cipher-mode",
++          "type": "407"
++        },
++        {
++          "name": "ivgen-alg",
++          "type": "408"
++        },
++        {
++          "name": "ivgen-hash-alg",
++          "default": null,
++          "type": "409"
++        },
++        {
++          "name": "hash-alg",
++          "type": "409"
++        },
++        {
++          "name": "payload-offset",
++          "type": "int"
++        },
++        {
++          "name": "master-key-iters",
++          "type": "int"
++        },
++        {
++          "name": "uuid",
++          "type": "str"
++        },
++        {
++          "name": "slots",
++          "type": "[410]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "404",
++      "members": [
++        {
++          "name": "base",
++          "type": "int"
++        },
++        {
++          "name": "limit",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "405",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "aes",
++          "type": "411"
++        },
++        {
++          "case": "luks",
++          "type": "403"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "372"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[265]",
++      "element-type": "265",
++      "meta-type": "array"
++    },
++    {
++      "name": "406",
++      "meta-type": "enum",
++      "values": [
++        "aes-128",
++        "aes-192",
++        "aes-256",
++        "des-rfb",
++        "3des",
++        "cast5-128",
++        "serpent-128",
++        "serpent-192",
++        "serpent-256",
++        "twofish-128",
++        "twofish-192",
++        "twofish-256"
++      ]
++    },
++    {
++      "name": "407",
++      "meta-type": "enum",
++      "values": [
++        "ecb",
++        "cbc",
++        "xts",
++        "ctr"
++      ]
++    },
++    {
++      "name": "408",
++      "meta-type": "enum",
++      "values": [
++        "plain",
++        "plain64",
++        "essiv"
++      ]
++    },
++    {
++      "name": "409",
++      "meta-type": "enum",
++      "values": [
++        "md5",
++        "sha1",
++        "sha224",
++        "sha256",
++        "sha384",
++        "sha512",
++        "ripemd160"
++      ]
++    },
++    {
++      "name": "[410]",
++      "element-type": "410",
++      "meta-type": "array"
++    },
++    {
++      "name": "410",
++      "members": [
++        {
++          "name": "active",
++          "type": "bool"
++        },
++        {
++          "name": "iters",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "stripes",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "key-offset",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "411",
++      "members": [
++      ],
++      "meta-type": "object"
++    }
++  ],
++  "id": "libvirt-47"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "static",
++    "model": {
++      "name": "host"
++    }
++  },
++  "id": "libvirt-48"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": true,
++        "osxsave": false,
++        "kvm-asyncpf": true,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "cr8legacy": false,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": true,
++        "3dnowext": false,
++        "npt": false,
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "pcommit": false,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": false,
++        "invtsc": false,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "pdcm": false,
++        "model": 94,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "tsc-adjust": true,
++        "kvm-steal-time": true,
++        "kvmclock": true,
++        "lwp": false,
++        "xop": false,
++        "avx": true,
++        "ospke": false,
++        "acpi": false,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "popcnt": true,
++        "xsaves": true,
++        "lm": true,
++        "umip": true,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": true,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": true,
++        "lmce": true,
++        "perfctr-nb": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vme": true,
++        "vmx": true,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": true,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-48"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "full",
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": true,
++        "osxsave": false,
++        "kvm-asyncpf": true,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "cr8legacy": false,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": true,
++        "3dnowext": false,
++        "npt": false,
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "pcommit": false,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": false,
++        "invtsc": false,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "pdcm": false,
++        "model": 94,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "tsc-adjust": true,
++        "kvm-steal-time": true,
++        "kvmclock": true,
++        "lwp": false,
++        "xop": false,
++        "avx": true,
++        "ospke": false,
++        "acpi": false,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "popcnt": true,
++        "xsaves": true,
++        "lm": true,
++        "umip": true,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": true,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": true,
++        "lmce": true,
++        "perfctr-nb": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vme": true,
++        "vmx": true,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": true,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-49"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "phys-bits": 0,
++        "core-id": -1,
++        "xlevel": 2147483656,
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": true,
++        "osxsave": false,
++        "tsc-frequency": 0,
++        "xd": true,
++        "hv-vendor-id": "",
++        "kvm-asyncpf": true,
++        "kvm_asyncpf": true,
++        "perfctr_core": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "decodeassists": false,
++        "avx512cd": false,
++        "sse4_1": true,
++        "sse4.1": true,
++        "sse4-1": true,
++        "family": 6,
++        "vmware-cpuid-freq": true,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "hv-runtime": false,
++        "xcrypt": false,
++        "thread-id": -1,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "hv-relaxed": false,
++        "hv-crash": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "cr8legacy": false,
++        "cpuid-0xb": true,
++        "xcrypt-en": false,
++        "kvm_pv_eoi": true,
++        "apic-id": 4294967295,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp_legacy": false,
++        "cmp-legacy": false,
++        "node-id": -1,
++        "avx512-4fmaps": false,
++        "vmcb_clean": false,
++        "vmcb-clean": false,
++        "3dnowext": false,
++        "hle": true,
++        "npt": false,
++        "memory": "/machine/unattached/system[0]",
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm_lock": false,
++        "svm-lock": false,
++        "pfthreshold": false,
++        "smep": true,
++        "smap": true,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "hv-stimer": false,
++        "i64": true,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pat": true,
++        "pae": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm_nopiodelay": true,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "socket-id": -1,
++        "pcommit": false,
++        "syscall": true,
++        "level": 13,
++        "avx512dq": false,
++        "svm": false,
++        "full-cpuid-auto-level": true,
++        "hv-reset": false,
++        "invtsc": false,
++        "sse3": true,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "kvm_mmu": false,
++        "kvm-mmu": false,
++        "sse4_2": true,
++        "sse4.2": true,
++        "sse4-2": true,
++        "pge": true,
++        "fill-mtrr-mask": true,
++        "nodeid_msr": false,
++        "pdcm": false,
++        "movbe": true,
++        "model": 94,
++        "nrip_save": false,
++        "nrip-save": false,
++        "kvm_pv_unhalt": true,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "enforce": false,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ibs": false,
++        "ds_cpl": false,
++        "ds-cpl": false,
++        "host-phys-bits": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "check": true,
++        "hv-spinlocks": -1,
++        "pmu": false,
++        "pmm": false,
++        "apic": true,
++        "min-xlevel2": 0,
++        "tsc-adjust": true,
++        "tsc_adjust": true,
++        "kvm-steal-time": true,
++        "kvm_steal_time": true,
++        "kvmclock": true,
++        "l3-cache": true,
++        "lwp": false,
++        "xop": false,
++        "avx": true,
++        "ospke": false,
++        "ace2": false,
++        "avx512bw": false,
++        "acpi": false,
++        "hv-vapic": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "popcnt": true,
++        "xsaves": true,
++        "tcg-cpuid": true,
++        "lm": true,
++        "umip": true,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "pclmuldq": true,
++        "x-hv-max-vps": -1,
++        "nodeid-msr": false,
++        "kvm": true,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "kvm-pv-unhalt": true,
++        "bmi2": true,
++        "bmi1": true,
++        "realized": false,
++        "tsc_scale": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "hv-vpindex": false,
++        "xlevel2": 0,
++        "clflushopt": true,
++        "kvm-no-smi-migration": false,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "lahf_lm": true,
++        "fxsr-opt": false,
++        "hv-synic": false,
++        "xstore": false,
++        "fxsr_opt": false,
++        "rtm": true,
++        "lmce": true,
++        "hv-time": false,
++        "perfctr-nb": false,
++        "perfctr_nb": false,
++        "ffxsr": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vmx": true,
++        "vme": true,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": true,
++        "tbm": false,
++        "wdt": false,
++        "pause_filter": false,
++        "sha-ni": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-49"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "static",
++    "model": {
++      "name": "host",
++      "props": {
++        "migratable": false
++      }
++    }
++  },
++  "id": "libvirt-50"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": true,
++        "osxsave": false,
++        "kvm-asyncpf": true,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "cr8legacy": false,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": true,
++        "3dnowext": false,
++        "npt": false,
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "pcommit": false,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": false,
++        "invtsc": true,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "pdcm": false,
++        "model": 94,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "tsc-adjust": true,
++        "kvm-steal-time": true,
++        "kvmclock": true,
++        "lwp": false,
++        "xop": false,
++        "avx": true,
++        "ospke": false,
++        "acpi": false,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "popcnt": true,
++        "xsaves": true,
++        "lm": true,
++        "umip": true,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": true,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": true,
++        "lmce": true,
++        "perfctr-nb": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vme": true,
++        "vmx": true,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": true,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-50"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "full",
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": true,
++        "osxsave": false,
++        "kvm-asyncpf": true,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "cr8legacy": false,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": true,
++        "3dnowext": false,
++        "npt": false,
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "pcommit": false,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": false,
++        "invtsc": true,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "pdcm": false,
++        "model": 94,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "tsc-adjust": true,
++        "kvm-steal-time": true,
++        "kvmclock": true,
++        "lwp": false,
++        "xop": false,
++        "avx": true,
++        "ospke": false,
++        "acpi": false,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "popcnt": true,
++        "xsaves": true,
++        "lm": true,
++        "umip": true,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": true,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": true,
++        "lmce": true,
++        "perfctr-nb": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vme": true,
++        "vmx": true,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": true,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-51"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "phys-bits": 0,
++        "core-id": -1,
++        "xlevel": 2147483656,
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": true,
++        "osxsave": false,
++        "tsc-frequency": 0,
++        "xd": true,
++        "hv-vendor-id": "",
++        "kvm-asyncpf": true,
++        "kvm_asyncpf": true,
++        "perfctr_core": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "decodeassists": false,
++        "avx512cd": false,
++        "sse4_1": true,
++        "sse4.1": true,
++        "sse4-1": true,
++        "family": 6,
++        "vmware-cpuid-freq": true,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "hv-runtime": false,
++        "xcrypt": false,
++        "thread-id": -1,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "hv-relaxed": false,
++        "hv-crash": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "cr8legacy": false,
++        "cpuid-0xb": true,
++        "xcrypt-en": false,
++        "kvm_pv_eoi": true,
++        "apic-id": 4294967295,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp_legacy": false,
++        "cmp-legacy": false,
++        "node-id": -1,
++        "avx512-4fmaps": false,
++        "vmcb_clean": false,
++        "vmcb-clean": false,
++        "3dnowext": false,
++        "hle": true,
++        "npt": false,
++        "memory": "/machine/unattached/system[0]",
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm_lock": false,
++        "svm-lock": false,
++        "pfthreshold": false,
++        "smep": true,
++        "smap": true,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "hv-stimer": false,
++        "i64": true,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pat": true,
++        "pae": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm_nopiodelay": true,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "socket-id": -1,
++        "pcommit": false,
++        "syscall": true,
++        "level": 13,
++        "avx512dq": false,
++        "svm": false,
++        "full-cpuid-auto-level": true,
++        "hv-reset": false,
++        "invtsc": true,
++        "sse3": true,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "kvm_mmu": false,
++        "kvm-mmu": false,
++        "sse4_2": true,
++        "sse4.2": true,
++        "sse4-2": true,
++        "pge": true,
++        "fill-mtrr-mask": true,
++        "nodeid_msr": false,
++        "pdcm": false,
++        "movbe": true,
++        "model": 94,
++        "nrip_save": false,
++        "nrip-save": false,
++        "kvm_pv_unhalt": true,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "enforce": false,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ibs": false,
++        "ds_cpl": false,
++        "ds-cpl": false,
++        "host-phys-bits": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "check": true,
++        "hv-spinlocks": -1,
++        "pmu": false,
++        "pmm": false,
++        "apic": true,
++        "min-xlevel2": 0,
++        "tsc-adjust": true,
++        "tsc_adjust": true,
++        "kvm-steal-time": true,
++        "kvm_steal_time": true,
++        "kvmclock": true,
++        "l3-cache": true,
++        "lwp": false,
++        "xop": false,
++        "avx": true,
++        "ospke": false,
++        "ace2": false,
++        "avx512bw": false,
++        "acpi": false,
++        "hv-vapic": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "popcnt": true,
++        "xsaves": true,
++        "tcg-cpuid": true,
++        "lm": true,
++        "umip": true,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "pclmuldq": true,
++        "x-hv-max-vps": -1,
++        "nodeid-msr": false,
++        "kvm": true,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "kvm-pv-unhalt": true,
++        "bmi2": true,
++        "bmi1": true,
++        "realized": false,
++        "tsc_scale": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "hv-vpindex": false,
++        "xlevel2": 0,
++        "clflushopt": true,
++        "kvm-no-smi-migration": false,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "lahf_lm": true,
++        "fxsr-opt": false,
++        "hv-synic": false,
++        "xstore": false,
++        "fxsr_opt": false,
++        "rtm": true,
++        "lmce": true,
++        "hv-time": false,
++        "perfctr-nb": false,
++        "perfctr_nb": false,
++        "ffxsr": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vmx": true,
++        "vme": true,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": true,
++        "tbm": false,
++        "wdt": false,
++        "pause_filter": false,
++        "sha-ni": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-51"
++}
++
++{
++  "execute": "qmp_capabilities",
++  "id": "libvirt-1"
++}
++
++{
++  "return": {
++  },
++  "id": "libvirt-1"
++}
++
++{
++  "execute": "query-cpu-definitions",
++  "id": "libvirt-2"
++}
++
++{
++  "return": [
++    {
++      "name": "max",
++      "typename": "max-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": false
++    },
++    {
++      "name": "host",
++      "typename": "host-x86_64-cpu",
++      "unavailable-features": [
++        "kvm"
++      ],
++      "static": false,
++      "migration-safe": false
++    },
++    {
++      "name": "base",
++      "typename": "base-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": true,
++      "migration-safe": true
++    },
++    {
++      "name": "qemu64",
++      "typename": "qemu64-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "qemu32",
++      "typename": "qemu32-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "phenom",
++      "typename": "phenom-x86_64-cpu",
++      "unavailable-features": [
++        "fxsr-opt",
++        "npt"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium3",
++      "typename": "pentium3-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium2",
++      "typename": "pentium2-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium",
++      "typename": "pentium-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "n270",
++      "typename": "n270-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "kvm64",
++      "typename": "kvm64-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "kvm32",
++      "typename": "kvm32-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "coreduo",
++      "typename": "coreduo-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "core2duo",
++      "typename": "core2duo-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "athlon",
++      "typename": "athlon-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Westmere",
++      "typename": "Westmere-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Server",
++      "typename": "Skylake-Server-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm",
++        "avx512f",
++        "avx512dq",
++        "rdseed",
++        "avx512cd",
++        "avx512bw",
++        "avx512vl",
++        "3dnowprefetch",
++        "xsavec"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Client",
++      "typename": "Skylake-Client-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm",
++        "rdseed",
++        "3dnowprefetch",
++        "xsavec"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "SandyBridge",
++      "typename": "SandyBridge-x86_64-cpu",
++      "unavailable-features": [
++        "x2apic",
++        "tsc-deadline",
++        "avx"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Penryn",
++      "typename": "Penryn-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G5",
++      "typename": "Opteron_G5-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "avx",
++        "f16c",
++        "misalignsse",
++        "3dnowprefetch",
++        "xop",
++        "fma4",
++        "tbm"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G4",
++      "typename": "Opteron_G4-x86_64-cpu",
++      "unavailable-features": [
++        "avx",
++        "misalignsse",
++        "3dnowprefetch",
++        "xop",
++        "fma4"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G3",
++      "typename": "Opteron_G3-x86_64-cpu",
++      "unavailable-features": [
++        "misalignsse"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G2",
++      "typename": "Opteron_G2-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G1",
++      "typename": "Opteron_G1-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Nehalem",
++      "typename": "Nehalem-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "IvyBridge",
++      "typename": "IvyBridge-x86_64-cpu",
++      "unavailable-features": [
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell",
++      "typename": "Haswell-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell-noTSX",
++      "typename": "Haswell-noTSX-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "avx2",
++        "invpcid"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "EPYC",
++      "typename": "EPYC-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "avx",
++        "f16c",
++        "rdrand",
++        "avx2",
++        "rdseed",
++        "sha-ni",
++        "fxsr-opt",
++        "misalignsse",
++        "3dnowprefetch",
++        "osvw",
++        "xsavec"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Conroe",
++      "typename": "Conroe-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell",
++      "typename": "Broadwell-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm",
++        "rdseed",
++        "3dnowprefetch"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell-noTSX",
++      "typename": "Broadwell-noTSX-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "avx2",
++        "invpcid",
++        "rdseed",
++        "3dnowprefetch"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "486",
++      "typename": "486-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    }
++  ],
++  "id": "libvirt-2"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "static",
++    "model": {
++      "name": "max"
++    }
++  },
++  "id": "libvirt-3"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": false,
++        "osxsave": false,
++        "kvm-asyncpf": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "cr8legacy": true,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": false,
++        "3dnowext": true,
++        "npt": false,
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "pcommit": true,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": true,
++        "invtsc": false,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "pdcm": false,
++        "model": 6,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "tsc-adjust": false,
++        "kvm-steal-time": false,
++        "kvmclock": false,
++        "lwp": false,
++        "xop": false,
++        "avx": false,
++        "ospke": true,
++        "acpi": true,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "popcnt": true,
++        "xsaves": false,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": false,
++        "lmce": false,
++        "perfctr-nb": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vme": false,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-3"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "full",
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": false,
++        "osxsave": false,
++        "kvm-asyncpf": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "cr8legacy": true,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": false,
++        "3dnowext": true,
++        "npt": false,
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "pcommit": true,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": true,
++        "invtsc": false,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "pdcm": false,
++        "model": 6,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "tsc-adjust": false,
++        "kvm-steal-time": false,
++        "kvmclock": false,
++        "lwp": false,
++        "xop": false,
++        "avx": false,
++        "ospke": true,
++        "acpi": true,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "popcnt": true,
++        "xsaves": false,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": false,
++        "lmce": false,
++        "perfctr-nb": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vme": false,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-4"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "phys-bits": 0,
++        "core-id": -1,
++        "xlevel": 2147483658,
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": false,
++        "osxsave": false,
++        "tsc-frequency": 0,
++        "xd": true,
++        "hv-vendor-id": "",
++        "kvm-asyncpf": false,
++        "kvm_asyncpf": false,
++        "perfctr_core": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "decodeassists": false,
++        "avx512cd": false,
++        "sse4_1": true,
++        "sse4.1": true,
++        "sse4-1": true,
++        "family": 6,
++        "vmware-cpuid-freq": true,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "hv-runtime": false,
++        "xcrypt": false,
++        "thread-id": -1,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "hv-relaxed": false,
++        "hv-crash": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "cr8legacy": true,
++        "cpuid-0xb": true,
++        "xcrypt-en": false,
++        "kvm_pv_eoi": false,
++        "apic-id": 4294967295,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp_legacy": false,
++        "cmp-legacy": false,
++        "node-id": -1,
++        "avx512-4fmaps": false,
++        "vmcb_clean": false,
++        "vmcb-clean": false,
++        "3dnowext": true,
++        "hle": false,
++        "npt": false,
++        "memory": "/machine/unattached/system[0]",
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm_lock": false,
++        "svm-lock": false,
++        "pfthreshold": false,
++        "smep": true,
++        "smap": true,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "hv-stimer": false,
++        "i64": true,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pat": true,
++        "pae": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm_nopiodelay": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "socket-id": -1,
++        "pcommit": true,
++        "syscall": true,
++        "level": 13,
++        "avx512dq": false,
++        "svm": true,
++        "full-cpuid-auto-level": true,
++        "hv-reset": false,
++        "invtsc": false,
++        "sse3": true,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "kvm_mmu": false,
++        "kvm-mmu": false,
++        "sse4_2": true,
++        "sse4.2": true,
++        "sse4-2": true,
++        "pge": true,
++        "fill-mtrr-mask": true,
++        "nodeid_msr": false,
++        "pdcm": false,
++        "movbe": true,
++        "model": 6,
++        "nrip_save": false,
++        "nrip-save": false,
++        "kvm_pv_unhalt": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "enforce": false,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ibs": false,
++        "ds_cpl": false,
++        "ds-cpl": false,
++        "host-phys-bits": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "check": true,
++        "hv-spinlocks": -1,
++        "pmu": false,
++        "pmm": false,
++        "apic": true,
++        "min-xlevel2": 0,
++        "tsc-adjust": false,
++        "tsc_adjust": false,
++        "kvm-steal-time": false,
++        "kvm_steal_time": false,
++        "kvmclock": false,
++        "l3-cache": true,
++        "lwp": false,
++        "xop": false,
++        "avx": false,
++        "ospke": true,
++        "ace2": false,
++        "avx512bw": false,
++        "acpi": true,
++        "hv-vapic": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "popcnt": true,
++        "xsaves": false,
++        "tcg-cpuid": true,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "pclmuldq": true,
++        "x-hv-max-vps": -1,
++        "nodeid-msr": false,
++        "kvm": true,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "kvm-pv-unhalt": false,
++        "bmi2": true,
++        "bmi1": true,
++        "realized": false,
++        "tsc_scale": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "hv-vpindex": false,
++        "xlevel2": 0,
++        "clflushopt": true,
++        "kvm-no-smi-migration": false,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "lahf_lm": true,
++        "fxsr-opt": false,
++        "hv-synic": false,
++        "xstore": false,
++        "fxsr_opt": false,
++        "rtm": false,
++        "lmce": false,
++        "hv-time": false,
++        "perfctr-nb": false,
++        "perfctr_nb": false,
++        "ffxsr": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vmx": false,
++        "vme": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "pause_filter": false,
++        "sha-ni": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-4"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "static",
++    "model": {
++      "name": "max",
++      "props": {
++        "migratable": false
++      }
++    }
++  },
++  "id": "libvirt-5"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": false,
++        "osxsave": false,
++        "kvm-asyncpf": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "cr8legacy": true,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": false,
++        "3dnowext": true,
++        "npt": false,
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "pcommit": true,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": true,
++        "invtsc": false,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "pdcm": false,
++        "model": 6,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "tsc-adjust": false,
++        "kvm-steal-time": false,
++        "kvmclock": false,
++        "lwp": false,
++        "xop": false,
++        "avx": false,
++        "ospke": true,
++        "acpi": true,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "popcnt": true,
++        "xsaves": false,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": false,
++        "lmce": false,
++        "perfctr-nb": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vme": false,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-5"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "full",
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": false,
++        "osxsave": false,
++        "kvm-asyncpf": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "cr8legacy": true,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": false,
++        "3dnowext": true,
++        "npt": false,
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "pcommit": true,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": true,
++        "invtsc": false,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "pdcm": false,
++        "model": 6,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "tsc-adjust": false,
++        "kvm-steal-time": false,
++        "kvmclock": false,
++        "lwp": false,
++        "xop": false,
++        "avx": false,
++        "ospke": true,
++        "acpi": true,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "popcnt": true,
++        "xsaves": false,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": false,
++        "lmce": false,
++        "perfctr-nb": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vme": false,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-6"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "phys-bits": 0,
++        "core-id": -1,
++        "xlevel": 2147483658,
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "pause-filter": false,
++        "xsavec": false,
++        "osxsave": false,
++        "tsc-frequency": 0,
++        "xd": true,
++        "hv-vendor-id": "",
++        "kvm-asyncpf": false,
++        "kvm_asyncpf": false,
++        "perfctr_core": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "decodeassists": false,
++        "avx512cd": false,
++        "sse4_1": true,
++        "sse4.1": true,
++        "sse4-1": true,
++        "family": 6,
++        "vmware-cpuid-freq": true,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "hv-runtime": false,
++        "xcrypt": false,
++        "thread-id": -1,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "hv-relaxed": false,
++        "hv-crash": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "cr8legacy": true,
++        "cpuid-0xb": true,
++        "xcrypt-en": false,
++        "kvm_pv_eoi": false,
++        "apic-id": 4294967295,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp_legacy": false,
++        "cmp-legacy": false,
++        "node-id": -1,
++        "avx512-4fmaps": false,
++        "vmcb_clean": false,
++        "vmcb-clean": false,
++        "3dnowext": true,
++        "hle": false,
++        "npt": false,
++        "memory": "/machine/unattached/system[0]",
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm_lock": false,
++        "svm-lock": false,
++        "pfthreshold": false,
++        "smep": true,
++        "smap": true,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "hv-stimer": false,
++        "i64": true,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pat": true,
++        "pae": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm_nopiodelay": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "socket-id": -1,
++        "pcommit": true,
++        "syscall": true,
++        "level": 13,
++        "avx512dq": false,
++        "svm": true,
++        "full-cpuid-auto-level": true,
++        "hv-reset": false,
++        "invtsc": false,
++        "sse3": true,
++        "sse2": true,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "kvm_mmu": false,
++        "kvm-mmu": false,
++        "sse4_2": true,
++        "sse4.2": true,
++        "sse4-2": true,
++        "pge": true,
++        "fill-mtrr-mask": true,
++        "nodeid_msr": false,
++        "pdcm": false,
++        "movbe": true,
++        "model": 6,
++        "nrip_save": false,
++        "nrip-save": false,
++        "kvm_pv_unhalt": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "enforce": false,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ibs": false,
++        "ds_cpl": false,
++        "ds-cpl": false,
++        "host-phys-bits": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "check": true,
++        "hv-spinlocks": -1,
++        "pmu": false,
++        "pmm": false,
++        "apic": true,
++        "min-xlevel2": 0,
++        "tsc-adjust": false,
++        "tsc_adjust": false,
++        "kvm-steal-time": false,
++        "kvm_steal_time": false,
++        "kvmclock": false,
++        "l3-cache": true,
++        "lwp": false,
++        "xop": false,
++        "avx": false,
++        "ospke": true,
++        "ace2": false,
++        "avx512bw": false,
++        "acpi": true,
++        "hv-vapic": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "popcnt": true,
++        "xsaves": false,
++        "tcg-cpuid": true,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "pclmuldq": true,
++        "x-hv-max-vps": -1,
++        "nodeid-msr": false,
++        "kvm": true,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "kvm-pv-unhalt": false,
++        "bmi2": true,
++        "bmi1": true,
++        "realized": false,
++        "tsc_scale": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "hv-vpindex": false,
++        "xlevel2": 0,
++        "clflushopt": true,
++        "kvm-no-smi-migration": false,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "lahf_lm": true,
++        "fxsr-opt": false,
++        "hv-synic": false,
++        "xstore": false,
++        "fxsr_opt": false,
++        "rtm": false,
++        "lmce": false,
++        "hv-time": false,
++        "perfctr-nb": false,
++        "perfctr_nb": false,
++        "ffxsr": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vmx": false,
++        "vme": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "pause_filter": false,
++        "sha-ni": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-6"
++}
+diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
+new file mode 100644
+index 0000000000..c52e44a498
+--- /dev/null
++++ b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
+@@ -0,0 +1,961 @@
++<qemuCaps>
++  <qemuctime>0</qemuctime>
++  <selfctime>0</selfctime>
++  <selfvers>0</selfvers>
++  <usedQMP/>
++  <flag name='kvm'/>
++  <flag name='no-hpet'/>
++  <flag name='spice'/>
++  <flag name='boot-index'/>
++  <flag name='hda-duplex'/>
++  <flag name='ccid-emulated'/>
++  <flag name='ccid-passthru'/>
++  <flag name='virtio-tx-alg'/>
++  <flag name='virtio-blk-pci.ioeventfd'/>
++  <flag name='sga'/>
++  <flag name='virtio-blk-pci.event_idx'/>
++  <flag name='virtio-net-pci.event_idx'/>
++  <flag name='piix3-usb-uhci'/>
++  <flag name='piix4-usb-uhci'/>
++  <flag name='usb-ehci'/>
++  <flag name='ich9-usb-ehci1'/>
++  <flag name='vt82c686b-usb-uhci'/>
++  <flag name='pci-ohci'/>
++  <flag name='usb-redir'/>
++  <flag name='usb-hub'/>
++  <flag name='ich9-ahci'/>
++  <flag name='no-acpi'/>
++  <flag name='virtio-blk-pci.scsi'/>
++  <flag name='scsi-disk.channel'/>
++  <flag name='scsi-block'/>
++  <flag name='transaction'/>
++  <flag name='block-job-async'/>
++  <flag name='scsi-cd'/>
++  <flag name='ide-cd'/>
++  <flag name='hda-micro'/>
++  <flag name='dump-guest-memory'/>
++  <flag name='nec-usb-xhci'/>
++  <flag name='balloon-event'/>
++  <flag name='lsi'/>
++  <flag name='virtio-scsi-pci'/>
++  <flag name='blockio'/>
++  <flag name='disable-s3'/>
++  <flag name='disable-s4'/>
++  <flag name='usb-redir.filter'/>
++  <flag name='ide-drive.wwn'/>
++  <flag name='scsi-disk.wwn'/>
++  <flag name='seccomp-sandbox'/>
++  <flag name='reboot-timeout'/>
++  <flag name='seamless-migration'/>
++  <flag name='block-commit'/>
++  <flag name='vnc'/>
++  <flag name='drive-mirror'/>
++  <flag name='usb-redir.bootindex'/>
++  <flag name='usb-host.bootindex'/>
++  <flag name='blockdev-snapshot-sync'/>
++  <flag name='qxl'/>
++  <flag name='VGA'/>
++  <flag name='cirrus-vga'/>
++  <flag name='vmware-svga'/>
++  <flag name='device-video-primary'/>
++  <flag name='usb-serial'/>
++  <flag name='usb-net'/>
++  <flag name='add-fd'/>
++  <flag name='nbd-server'/>
++  <flag name='virtio-rng'/>
++  <flag name='rng-random'/>
++  <flag name='rng-egd'/>
++  <flag name='megasas'/>
++  <flag name='tpm-passthrough'/>
++  <flag name='tpm-tis'/>
++  <flag name='pci-bridge'/>
++  <flag name='vfio-pci'/>
++  <flag name='vfio-pci.bootindex'/>
++  <flag name='scsi-generic'/>
++  <flag name='scsi-generic.bootindex'/>
++  <flag name='mem-merge'/>
++  <flag name='vnc-websocket'/>
++  <flag name='drive-discard'/>
++  <flag name='mlock'/>
++  <flag name='device-del-event'/>
++  <flag name='dmi-to-pci-bridge'/>
++  <flag name='i440fx-pci-hole64-size'/>
++  <flag name='q35-pci-hole64-size'/>
++  <flag name='usb-storage'/>
++  <flag name='usb-storage.removable'/>
++  <flag name='virtio-mmio'/>
++  <flag name='ich9-intel-hda'/>
++  <flag name='kvm-pit-lost-tick-policy'/>
++  <flag name='boot-strict'/>
++  <flag name='pvpanic'/>
++  <flag name='spice-file-xfer-disable'/>
++  <flag name='spiceport'/>
++  <flag name='usb-kbd'/>
++  <flag name='msg-timestamp'/>
++  <flag name='active-commit'/>
++  <flag name='change-backing-file'/>
++  <flag name='memory-backend-ram'/>
++  <flag name='numa'/>
++  <flag name='memory-backend-file'/>
++  <flag name='usb-audio'/>
++  <flag name='rtc-reset-reinjection'/>
++  <flag name='splash-timeout'/>
++  <flag name='iothread'/>
++  <flag name='migrate-rdma'/>
++  <flag name='ivshmem'/>
++  <flag name='drive-iotune-max'/>
++  <flag name='VGA.vgamem_mb'/>
++  <flag name='vmware-svga.vgamem_mb'/>
++  <flag name='qxl.vgamem_mb'/>
++  <flag name='pc-dimm'/>
++  <flag name='machine-vmport-opt'/>
++  <flag name='aes-key-wrap'/>
++  <flag name='dea-key-wrap'/>
++  <flag name='pci-serial'/>
++  <flag name='vhost-user-multiqueue'/>
++  <flag name='migration-event'/>
++  <flag name='ioh3420'/>
++  <flag name='x3130-upstream'/>
++  <flag name='xio3130-downstream'/>
++  <flag name='rtl8139'/>
++  <flag name='e1000'/>
++  <flag name='virtio-net'/>
++  <flag name='gic-version'/>
++  <flag name='incoming-defer'/>
++  <flag name='virtio-gpu'/>
++  <flag name='virtio-gpu.virgl'/>
++  <flag name='virtio-keyboard'/>
++  <flag name='virtio-mouse'/>
++  <flag name='virtio-tablet'/>
++  <flag name='virtio-input-host'/>
++  <flag name='chardev-file-append'/>
++  <flag name='ich9-disable-s3'/>
++  <flag name='ich9-disable-s4'/>
++  <flag name='vserport-change-event'/>
++  <flag name='virtio-balloon-pci.deflate-on-oom'/>
++  <flag name='mptsas1068'/>
++  <flag name='spice-gl'/>
++  <flag name='qxl.vram64_size_mb'/>
++  <flag name='chardev-logfile'/>
++  <flag name='debug-threads'/>
++  <flag name='secret'/>
++  <flag name='pxb'/>
++  <flag name='pxb-pcie'/>
++  <flag name='device-tray-moved-event'/>
++  <flag name='nec-usb-xhci-ports'/>
++  <flag name='virtio-scsi-pci.iothread'/>
++  <flag name='name-guest'/>
++  <flag name='qxl.max_outputs'/>
++  <flag name='spice-unix'/>
++  <flag name='drive-detect-zeroes'/>
++  <flag name='tls-creds-x509'/>
++  <flag name='intel-iommu'/>
++  <flag name='smm'/>
++  <flag name='virtio-pci-disable-legacy'/>
++  <flag name='query-hotpluggable-cpus'/>
++  <flag name='virtio-net.rx_queue_size'/>
++  <flag name='virtio-vga'/>
++  <flag name='drive-iotune-max-length'/>
++  <flag name='ivshmem-plain'/>
++  <flag name='ivshmem-doorbell'/>
++  <flag name='query-qmp-schema'/>
++  <flag name='gluster.debug_level'/>
++  <flag name='vhost-scsi'/>
++  <flag name='drive-iotune-group'/>
++  <flag name='query-cpu-model-expansion'/>
++  <flag name='virtio-net.host_mtu'/>
++  <flag name='spice-rendernode'/>
++  <flag name='nvdimm'/>
++  <flag name='pcie-root-port'/>
++  <flag name='query-cpu-definitions'/>
++  <flag name='block-write-threshold'/>
++  <flag name='query-named-block-nodes'/>
++  <flag name='cpu-cache'/>
++  <flag name='qemu-xhci'/>
++  <flag name='kernel-irqchip'/>
++  <flag name='kernel-irqchip.split'/>
++  <flag name='intel-iommu.intremap'/>
++  <flag name='intel-iommu.caching-mode'/>
++  <flag name='intel-iommu.eim'/>
++  <flag name='intel-iommu.device-iotlb'/>
++  <flag name='virtio.iommu_platform'/>
++  <flag name='virtio.ats'/>
++  <flag name='loadparm'/>
++  <flag name='vnc-multi-servers'/>
++  <flag name='virtio-net.tx_queue_size'/>
++  <flag name='chardev-reconnect'/>
++  <flag name='virtio-gpu.max_outputs'/>
++  <flag name='vxhs'/>
++  <flag name='virtio-blk.num-queues'/>
++  <flag name='vmcoreinfo'/>
++  <flag name='numa.dist'/>
++  <flag name='disk-share-rw'/>
++  <flag name='iscsi.password-secret'/>
++  <flag name='isa-serial'/>
++  <flag name='dump-completed'/>
++  <flag name='qcow2-luks'/>
++  <flag name='pcie-pci-bridge'/>
++  <flag name='seccomp-blacklist'/>
++  <flag name='disk-write-cache'/>
++  <flag name='nbd-tls'/>
++  <flag name='pr-manager-helper'/>
++  <flag name='sdl-gl'/>
++  <flag name='hda-output'/>
++  <flag name='blockdev-del'/>
++  <flag name='vmgenid'/>
++  <flag name='vhost-vsock'/>
++  <flag name='tpm-emulator'/>
++  <flag name='mch'/>
++  <flag name='mch.extended-tseg-mbytes'/>
++  <version>2011000</version>
++  <kvmVersion>0</kvmVersion>
++  <microcodeVersion>371455</microcodeVersion>
++  <package> (v2.11.0)</package>
++  <arch>x86_64</arch>
++  <hostCPU type='kvm' model='base' migratability='yes'>
++    <property name='phys-bits' type='number' value='0'/>
++    <property name='core-id' type='number' value='-1'/>
++    <property name='xlevel' type='number' value='2147483656'/>
++    <property name='cmov' type='boolean' value='true' migratable='yes'/>
++    <property name='ia64' type='boolean' value='false'/>
++    <property name='aes' type='boolean' value='true' migratable='yes'/>
++    <property name='mmx' type='boolean' value='true' migratable='yes'/>
++    <property name='rdpid' type='boolean' value='false'/>
++    <property name='arat' type='boolean' value='true' migratable='yes'/>
++    <property name='pause-filter' type='boolean' value='false'/>
++    <property name='xsavec' type='boolean' value='true' migratable='yes'/>
++    <property name='osxsave' type='boolean' value='false'/>
++    <property name='tsc-frequency' type='number' value='0'/>
++    <property name='xd' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-vendor-id' type='string' value=''/>
++    <property name='kvm-asyncpf' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm_asyncpf' type='boolean' value='true' migratable='yes'/>
++    <property name='perfctr_core' type='boolean' value='false'/>
++    <property name='perfctr-core' type='boolean' value='false'/>
++    <property name='mpx' type='boolean' value='true' migratable='yes'/>
++    <property name='pbe' type='boolean' value='false'/>
++    <property name='decodeassists' type='boolean' value='false'/>
++    <property name='avx512cd' type='boolean' value='false'/>
++    <property name='sse4_1' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4.1' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4-1' type='boolean' value='true' migratable='yes'/>
++    <property name='family' type='number' value='6'/>
++    <property name='vmware-cpuid-freq' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512f' type='boolean' value='false'/>
++    <property name='msr' type='boolean' value='true' migratable='yes'/>
++    <property name='mce' type='boolean' value='true' migratable='yes'/>
++    <property name='mca' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-runtime' type='boolean' value='false'/>
++    <property name='xcrypt' type='boolean' value='false'/>
++    <property name='thread-id' type='number' value='-1'/>
++    <property name='min-level' type='number' value='13'/>
++    <property name='xgetbv1' type='boolean' value='true' migratable='yes'/>
++    <property name='cid' type='boolean' value='false'/>
++    <property name='hv-relaxed' type='boolean' value='false'/>
++    <property name='hv-crash' type='boolean' value='false'/>
++    <property name='ds' type='boolean' value='false'/>
++    <property name='fxsr' type='boolean' value='true' migratable='yes'/>
++    <property name='xsaveopt' type='boolean' value='true' migratable='yes'/>
++    <property name='xtpr' type='boolean' value='false'/>
++    <property name='avx512vl' type='boolean' value='false'/>
++    <property name='avx512-vpopcntdq' type='boolean' value='false'/>
++    <property name='phe' type='boolean' value='false'/>
++    <property name='extapic' type='boolean' value='false'/>
++    <property name='3dnowprefetch' type='boolean' value='true' migratable='yes'/>
++    <property name='cr8legacy' type='boolean' value='false'/>
++    <property name='cpuid-0xb' type='boolean' value='true' migratable='yes'/>
++    <property name='xcrypt-en' type='boolean' value='false'/>
++    <property name='kvm_pv_eoi' type='boolean' value='true' migratable='yes'/>
++    <property name='apic-id' type='number' value='4294967295'/>
++    <property name='pn' type='boolean' value='false'/>
++    <property name='dca' type='boolean' value='false'/>
++    <property name='vendor' type='string' value='GenuineIntel'/>
++    <property name='pku' type='boolean' value='false'/>
++    <property name='smx' type='boolean' value='false'/>
++    <property name='cmp_legacy' type='boolean' value='false'/>
++    <property name='cmp-legacy' type='boolean' value='false'/>
++    <property name='node-id' type='number' value='-1'/>
++    <property name='avx512-4fmaps' type='boolean' value='false'/>
++    <property name='vmcb_clean' type='boolean' value='false'/>
++    <property name='vmcb-clean' type='boolean' value='false'/>
++    <property name='3dnowext' type='boolean' value='false'/>
++    <property name='hle' type='boolean' value='true' migratable='yes'/>
++    <property name='npt' type='boolean' value='false'/>
++    <property name='memory' type='string' value='/machine/unattached/system[0]'/>
++    <property name='clwb' type='boolean' value='false'/>
++    <property name='lbrv' type='boolean' value='false'/>
++    <property name='adx' type='boolean' value='true' migratable='yes'/>
++    <property name='ss' type='boolean' value='true' migratable='yes'/>
++    <property name='pni' type='boolean' value='true' migratable='yes'/>
++    <property name='svm_lock' type='boolean' value='false'/>
++    <property name='svm-lock' type='boolean' value='false'/>
++    <property name='pfthreshold' type='boolean' value='false'/>
++    <property name='smep' type='boolean' value='true' migratable='yes'/>
++    <property name='smap' type='boolean' value='true' migratable='yes'/>
++    <property name='x2apic' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512vbmi' type='boolean' value='false'/>
++    <property name='hv-stimer' type='boolean' value='false'/>
++    <property name='i64' type='boolean' value='true' migratable='yes'/>
++    <property name='flushbyasid' type='boolean' value='false'/>
++    <property name='f16c' type='boolean' value='true' migratable='yes'/>
++    <property name='ace2-en' type='boolean' value='false'/>
++    <property name='pat' type='boolean' value='true' migratable='yes'/>
++    <property name='pae' type='boolean' value='true' migratable='yes'/>
++    <property name='sse' type='boolean' value='true' migratable='yes'/>
++    <property name='phe-en' type='boolean' value='false'/>
++    <property name='kvm_nopiodelay' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-nopiodelay' type='boolean' value='true' migratable='yes'/>
++    <property name='tm' type='boolean' value='false'/>
++    <property name='kvmclock-stable-bit' type='boolean' value='true' migratable='yes'/>
++    <property name='hypervisor' type='boolean' value='true' migratable='yes'/>
++    <property name='socket-id' type='number' value='-1'/>
++    <property name='pcommit' type='boolean' value='false'/>
++    <property name='syscall' type='boolean' value='true' migratable='yes'/>
++    <property name='level' type='number' value='13'/>
++    <property name='avx512dq' type='boolean' value='false'/>
++    <property name='svm' type='boolean' value='false'/>
++    <property name='full-cpuid-auto-level' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-reset' type='boolean' value='false'/>
++    <property name='invtsc' type='boolean' value='true' migratable='no'/>
++    <property name='sse3' type='boolean' value='true' migratable='yes'/>
++    <property name='sse2' type='boolean' value='true' migratable='yes'/>
++    <property name='est' type='boolean' value='false'/>
++    <property name='avx512ifma' type='boolean' value='false'/>
++    <property name='tm2' type='boolean' value='false'/>
++    <property name='kvm-pv-eoi' type='boolean' value='true' migratable='yes'/>
++    <property name='cx8' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm_mmu' type='boolean' value='false'/>
++    <property name='kvm-mmu' type='boolean' value='false'/>
++    <property name='sse4_2' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4.2' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4-2' type='boolean' value='true' migratable='yes'/>
++    <property name='pge' type='boolean' value='true' migratable='yes'/>
++    <property name='fill-mtrr-mask' type='boolean' value='true' migratable='yes'/>
++    <property name='nodeid_msr' type='boolean' value='false'/>
++    <property name='pdcm' type='boolean' value='false'/>
++    <property name='movbe' type='boolean' value='true' migratable='yes'/>
++    <property name='model' type='number' value='94'/>
++    <property name='nrip_save' type='boolean' value='false'/>
++    <property name='nrip-save' type='boolean' value='false'/>
++    <property name='kvm_pv_unhalt' type='boolean' value='true' migratable='yes'/>
++    <property name='ssse3' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4a' type='boolean' value='false'/>
++    <property name='invpcid' type='boolean' value='true' migratable='yes'/>
++    <property name='pdpe1gb' type='boolean' value='true' migratable='yes'/>
++    <property name='tsc-deadline' type='boolean' value='true' migratable='yes'/>
++    <property name='fma' type='boolean' value='true' migratable='yes'/>
++    <property name='cx16' type='boolean' value='true' migratable='yes'/>
++    <property name='de' type='boolean' value='true' migratable='yes'/>
++    <property name='enforce' type='boolean' value='false'/>
++    <property name='stepping' type='number' value='3'/>
++    <property name='xsave' type='boolean' value='true' migratable='yes'/>
++    <property name='clflush' type='boolean' value='true' migratable='yes'/>
++    <property name='skinit' type='boolean' value='false'/>
++    <property name='tsc' type='boolean' value='true' migratable='yes'/>
++    <property name='tce' type='boolean' value='false'/>
++    <property name='fpu' type='boolean' value='true' migratable='yes'/>
++    <property name='ibs' type='boolean' value='false'/>
++    <property name='ds_cpl' type='boolean' value='false'/>
++    <property name='ds-cpl' type='boolean' value='false'/>
++    <property name='host-phys-bits' type='boolean' value='false'/>
++    <property name='fma4' type='boolean' value='false'/>
++    <property name='la57' type='boolean' value='false'/>
++    <property name='osvw' type='boolean' value='false'/>
++    <property name='check' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-spinlocks' type='number' value='-1'/>
++    <property name='pmu' type='boolean' value='false'/>
++    <property name='pmm' type='boolean' value='false'/>
++    <property name='apic' type='boolean' value='true' migratable='yes'/>
++    <property name='min-xlevel2' type='number' value='0'/>
++    <property name='tsc-adjust' type='boolean' value='true' migratable='yes'/>
++    <property name='tsc_adjust' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-steal-time' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm_steal_time' type='boolean' value='true' migratable='yes'/>
++    <property name='kvmclock' type='boolean' value='true' migratable='yes'/>
++    <property name='l3-cache' type='boolean' value='true' migratable='yes'/>
++    <property name='lwp' type='boolean' value='false'/>
++    <property name='xop' type='boolean' value='false'/>
++    <property name='avx' type='boolean' value='true' migratable='yes'/>
++    <property name='ospke' type='boolean' value='false'/>
++    <property name='ace2' type='boolean' value='false'/>
++    <property name='avx512bw' type='boolean' value='false'/>
++    <property name='acpi' type='boolean' value='false'/>
++    <property name='hv-vapic' type='boolean' value='false'/>
++    <property name='fsgsbase' type='boolean' value='true' migratable='yes'/>
++    <property name='ht' type='boolean' value='false'/>
++    <property name='nx' type='boolean' value='true' migratable='yes'/>
++    <property name='pclmulqdq' type='boolean' value='true' migratable='yes'/>
++    <property name='mmxext' type='boolean' value='false'/>
++    <property name='popcnt' type='boolean' value='true' migratable='yes'/>
++    <property name='xsaves' type='boolean' value='true' migratable='yes'/>
++    <property name='tcg-cpuid' type='boolean' value='true' migratable='yes'/>
++    <property name='lm' type='boolean' value='true' migratable='yes'/>
++    <property name='umip' type='boolean' value='true' migratable='yes'/>
++    <property name='pse' type='boolean' value='true' migratable='yes'/>
++    <property name='avx2' type='boolean' value='true' migratable='yes'/>
++    <property name='sep' type='boolean' value='true' migratable='yes'/>
++    <property name='pclmuldq' type='boolean' value='true' migratable='yes'/>
++    <property name='x-hv-max-vps' type='number' value='-1'/>
++    <property name='nodeid-msr' type='boolean' value='false'/>
++    <property name='kvm' type='boolean' value='true' migratable='yes'/>
++    <property name='misalignsse' type='boolean' value='false'/>
++    <property name='min-xlevel' type='number' value='2147483656'/>
++    <property name='kvm-pv-unhalt' type='boolean' value='true' migratable='yes'/>
++    <property name='bmi2' type='boolean' value='true' migratable='yes'/>
++    <property name='bmi1' type='boolean' value='true' migratable='yes'/>
++    <property name='realized' type='boolean' value='false'/>
++    <property name='tsc_scale' type='boolean' value='false'/>
++    <property name='tsc-scale' type='boolean' value='false'/>
++    <property name='topoext' type='boolean' value='false'/>
++    <property name='hv-vpindex' type='boolean' value='false'/>
++    <property name='xlevel2' type='number' value='0'/>
++    <property name='clflushopt' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-no-smi-migration' type='boolean' value='false'/>
++    <property name='monitor' type='boolean' value='false'/>
++    <property name='avx512er' type='boolean' value='false'/>
++    <property name='pmm-en' type='boolean' value='false'/>
++    <property name='pcid' type='boolean' value='true' migratable='yes'/>
++    <property name='3dnow' type='boolean' value='false'/>
++    <property name='erms' type='boolean' value='true' migratable='yes'/>
++    <property name='lahf-lm' type='boolean' value='true' migratable='yes'/>
++    <property name='lahf_lm' type='boolean' value='true' migratable='yes'/>
++    <property name='fxsr-opt' type='boolean' value='false'/>
++    <property name='hv-synic' type='boolean' value='false'/>
++    <property name='xstore' type='boolean' value='false'/>
++    <property name='fxsr_opt' type='boolean' value='false'/>
++    <property name='rtm' type='boolean' value='true' migratable='yes'/>
++    <property name='lmce' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-time' type='boolean' value='false'/>
++    <property name='perfctr-nb' type='boolean' value='false'/>
++    <property name='perfctr_nb' type='boolean' value='false'/>
++    <property name='ffxsr' type='boolean' value='false'/>
++    <property name='rdrand' type='boolean' value='true' migratable='yes'/>
++    <property name='rdseed' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512-4vnniw' type='boolean' value='false'/>
++    <property name='vmx' type='boolean' value='true' migratable='yes'/>
++    <property name='vme' type='boolean' value='true' migratable='yes'/>
++    <property name='dtes64' type='boolean' value='false'/>
++    <property name='mtrr' type='boolean' value='true' migratable='yes'/>
++    <property name='rdtscp' type='boolean' value='true' migratable='yes'/>
++    <property name='pse36' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-pv-tlb-flush' type='boolean' value='true' migratable='yes'/>
++    <property name='tbm' type='boolean' value='false'/>
++    <property name='wdt' type='boolean' value='false'/>
++    <property name='pause_filter' type='boolean' value='false'/>
++    <property name='sha-ni' type='boolean' value='false'/>
++    <property name='model-id' type='string' value='Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz'/>
++    <property name='abm' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512pf' type='boolean' value='false'/>
++    <property name='xstore-en' type='boolean' value='false'/>
++  </hostCPU>
++  <hostCPU type='tcg' model='base' migratability='yes'>
++    <property name='phys-bits' type='number' value='0'/>
++    <property name='core-id' type='number' value='-1'/>
++    <property name='xlevel' type='number' value='2147483658'/>
++    <property name='cmov' type='boolean' value='true' migratable='yes'/>
++    <property name='ia64' type='boolean' value='false'/>
++    <property name='aes' type='boolean' value='true' migratable='yes'/>
++    <property name='mmx' type='boolean' value='true' migratable='yes'/>
++    <property name='rdpid' type='boolean' value='false'/>
++    <property name='arat' type='boolean' value='true' migratable='yes'/>
++    <property name='pause-filter' type='boolean' value='false'/>
++    <property name='xsavec' type='boolean' value='false'/>
++    <property name='osxsave' type='boolean' value='false'/>
++    <property name='tsc-frequency' type='number' value='0'/>
++    <property name='xd' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-vendor-id' type='string' value=''/>
++    <property name='kvm-asyncpf' type='boolean' value='false'/>
++    <property name='kvm_asyncpf' type='boolean' value='false'/>
++    <property name='perfctr_core' type='boolean' value='false'/>
++    <property name='perfctr-core' type='boolean' value='false'/>
++    <property name='mpx' type='boolean' value='true' migratable='yes'/>
++    <property name='pbe' type='boolean' value='false'/>
++    <property name='decodeassists' type='boolean' value='false'/>
++    <property name='avx512cd' type='boolean' value='false'/>
++    <property name='sse4_1' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4.1' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4-1' type='boolean' value='true' migratable='yes'/>
++    <property name='family' type='number' value='6'/>
++    <property name='vmware-cpuid-freq' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512f' type='boolean' value='false'/>
++    <property name='msr' type='boolean' value='true' migratable='yes'/>
++    <property name='mce' type='boolean' value='true' migratable='yes'/>
++    <property name='mca' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-runtime' type='boolean' value='false'/>
++    <property name='xcrypt' type='boolean' value='false'/>
++    <property name='thread-id' type='number' value='-1'/>
++    <property name='min-level' type='number' value='13'/>
++    <property name='xgetbv1' type='boolean' value='true' migratable='yes'/>
++    <property name='cid' type='boolean' value='false'/>
++    <property name='hv-relaxed' type='boolean' value='false'/>
++    <property name='hv-crash' type='boolean' value='false'/>
++    <property name='ds' type='boolean' value='false'/>
++    <property name='fxsr' type='boolean' value='true' migratable='yes'/>
++    <property name='xsaveopt' type='boolean' value='true' migratable='yes'/>
++    <property name='xtpr' type='boolean' value='false'/>
++    <property name='avx512vl' type='boolean' value='false'/>
++    <property name='avx512-vpopcntdq' type='boolean' value='false'/>
++    <property name='phe' type='boolean' value='false'/>
++    <property name='extapic' type='boolean' value='false'/>
++    <property name='3dnowprefetch' type='boolean' value='false'/>
++    <property name='cr8legacy' type='boolean' value='true' migratable='yes'/>
++    <property name='cpuid-0xb' type='boolean' value='true' migratable='yes'/>
++    <property name='xcrypt-en' type='boolean' value='false'/>
++    <property name='kvm_pv_eoi' type='boolean' value='false'/>
++    <property name='apic-id' type='number' value='4294967295'/>
++    <property name='pn' type='boolean' value='false'/>
++    <property name='dca' type='boolean' value='false'/>
++    <property name='vendor' type='string' value='AuthenticAMD'/>
++    <property name='pku' type='boolean' value='true' migratable='yes'/>
++    <property name='smx' type='boolean' value='false'/>
++    <property name='cmp_legacy' type='boolean' value='false'/>
++    <property name='cmp-legacy' type='boolean' value='false'/>
++    <property name='node-id' type='number' value='-1'/>
++    <property name='avx512-4fmaps' type='boolean' value='false'/>
++    <property name='vmcb_clean' type='boolean' value='false'/>
++    <property name='vmcb-clean' type='boolean' value='false'/>
++    <property name='3dnowext' type='boolean' value='true' migratable='yes'/>
++    <property name='hle' type='boolean' value='false'/>
++    <property name='npt' type='boolean' value='false'/>
++    <property name='memory' type='string' value='/machine/unattached/system[0]'/>
++    <property name='clwb' type='boolean' value='true' migratable='yes'/>
++    <property name='lbrv' type='boolean' value='false'/>
++    <property name='adx' type='boolean' value='true' migratable='yes'/>
++    <property name='ss' type='boolean' value='true' migratable='yes'/>
++    <property name='pni' type='boolean' value='true' migratable='yes'/>
++    <property name='svm_lock' type='boolean' value='false'/>
++    <property name='svm-lock' type='boolean' value='false'/>
++    <property name='pfthreshold' type='boolean' value='false'/>
++    <property name='smep' type='boolean' value='true' migratable='yes'/>
++    <property name='smap' type='boolean' value='true' migratable='yes'/>
++    <property name='x2apic' type='boolean' value='false'/>
++    <property name='avx512vbmi' type='boolean' value='false'/>
++    <property name='hv-stimer' type='boolean' value='false'/>
++    <property name='i64' type='boolean' value='true' migratable='yes'/>
++    <property name='flushbyasid' type='boolean' value='false'/>
++    <property name='f16c' type='boolean' value='false'/>
++    <property name='ace2-en' type='boolean' value='false'/>
++    <property name='pat' type='boolean' value='true' migratable='yes'/>
++    <property name='pae' type='boolean' value='true' migratable='yes'/>
++    <property name='sse' type='boolean' value='true' migratable='yes'/>
++    <property name='phe-en' type='boolean' value='false'/>
++    <property name='kvm_nopiodelay' type='boolean' value='false'/>
++    <property name='kvm-nopiodelay' type='boolean' value='false'/>
++    <property name='tm' type='boolean' value='false'/>
++    <property name='kvmclock-stable-bit' type='boolean' value='false'/>
++    <property name='hypervisor' type='boolean' value='true' migratable='yes'/>
++    <property name='socket-id' type='number' value='-1'/>
++    <property name='pcommit' type='boolean' value='true' migratable='yes'/>
++    <property name='syscall' type='boolean' value='true' migratable='yes'/>
++    <property name='level' type='number' value='13'/>
++    <property name='avx512dq' type='boolean' value='false'/>
++    <property name='svm' type='boolean' value='true' migratable='yes'/>
++    <property name='full-cpuid-auto-level' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-reset' type='boolean' value='false'/>
++    <property name='invtsc' type='boolean' value='false'/>
++    <property name='sse3' type='boolean' value='true' migratable='yes'/>
++    <property name='sse2' type='boolean' value='true' migratable='yes'/>
++    <property name='est' type='boolean' value='false'/>
++    <property name='avx512ifma' type='boolean' value='false'/>
++    <property name='tm2' type='boolean' value='false'/>
++    <property name='kvm-pv-eoi' type='boolean' value='false'/>
++    <property name='cx8' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm_mmu' type='boolean' value='false'/>
++    <property name='kvm-mmu' type='boolean' value='false'/>
++    <property name='sse4_2' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4.2' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4-2' type='boolean' value='true' migratable='yes'/>
++    <property name='pge' type='boolean' value='true' migratable='yes'/>
++    <property name='fill-mtrr-mask' type='boolean' value='true' migratable='yes'/>
++    <property name='nodeid_msr' type='boolean' value='false'/>
++    <property name='pdcm' type='boolean' value='false'/>
++    <property name='movbe' type='boolean' value='true' migratable='yes'/>
++    <property name='model' type='number' value='6'/>
++    <property name='nrip_save' type='boolean' value='false'/>
++    <property name='nrip-save' type='boolean' value='false'/>
++    <property name='kvm_pv_unhalt' type='boolean' value='false'/>
++    <property name='ssse3' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4a' type='boolean' value='true' migratable='yes'/>
++    <property name='invpcid' type='boolean' value='false'/>
++    <property name='pdpe1gb' type='boolean' value='true' migratable='yes'/>
++    <property name='tsc-deadline' type='boolean' value='false'/>
++    <property name='fma' type='boolean' value='false'/>
++    <property name='cx16' type='boolean' value='true' migratable='yes'/>
++    <property name='de' type='boolean' value='true' migratable='yes'/>
++    <property name='enforce' type='boolean' value='false'/>
++    <property name='stepping' type='number' value='3'/>
++    <property name='xsave' type='boolean' value='true' migratable='yes'/>
++    <property name='clflush' type='boolean' value='true' migratable='yes'/>
++    <property name='skinit' type='boolean' value='false'/>
++    <property name='tsc' type='boolean' value='true' migratable='yes'/>
++    <property name='tce' type='boolean' value='false'/>
++    <property name='fpu' type='boolean' value='true' migratable='yes'/>
++    <property name='ibs' type='boolean' value='false'/>
++    <property name='ds_cpl' type='boolean' value='false'/>
++    <property name='ds-cpl' type='boolean' value='false'/>
++    <property name='host-phys-bits' type='boolean' value='false'/>
++    <property name='fma4' type='boolean' value='false'/>
++    <property name='la57' type='boolean' value='true' migratable='yes'/>
++    <property name='osvw' type='boolean' value='false'/>
++    <property name='check' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-spinlocks' type='number' value='-1'/>
++    <property name='pmu' type='boolean' value='false'/>
++    <property name='pmm' type='boolean' value='false'/>
++    <property name='apic' type='boolean' value='true' migratable='yes'/>
++    <property name='min-xlevel2' type='number' value='0'/>
++    <property name='tsc-adjust' type='boolean' value='false'/>
++    <property name='tsc_adjust' type='boolean' value='false'/>
++    <property name='kvm-steal-time' type='boolean' value='false'/>
++    <property name='kvm_steal_time' type='boolean' value='false'/>
++    <property name='kvmclock' type='boolean' value='false'/>
++    <property name='l3-cache' type='boolean' value='true' migratable='yes'/>
++    <property name='lwp' type='boolean' value='false'/>
++    <property name='xop' type='boolean' value='false'/>
++    <property name='avx' type='boolean' value='false'/>
++    <property name='ospke' type='boolean' value='true' migratable='yes'/>
++    <property name='ace2' type='boolean' value='false'/>
++    <property name='avx512bw' type='boolean' value='false'/>
++    <property name='acpi' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-vapic' type='boolean' value='false'/>
++    <property name='fsgsbase' type='boolean' value='true' migratable='yes'/>
++    <property name='ht' type='boolean' value='false'/>
++    <property name='nx' type='boolean' value='true' migratable='yes'/>
++    <property name='pclmulqdq' type='boolean' value='true' migratable='yes'/>
++    <property name='mmxext' type='boolean' value='true' migratable='yes'/>
++    <property name='popcnt' type='boolean' value='true' migratable='yes'/>
++    <property name='xsaves' type='boolean' value='false'/>
++    <property name='tcg-cpuid' type='boolean' value='true' migratable='yes'/>
++    <property name='lm' type='boolean' value='true' migratable='yes'/>
++    <property name='umip' type='boolean' value='false'/>
++    <property name='pse' type='boolean' value='true' migratable='yes'/>
++    <property name='avx2' type='boolean' value='false'/>
++    <property name='sep' type='boolean' value='true' migratable='yes'/>
++    <property name='pclmuldq' type='boolean' value='true' migratable='yes'/>
++    <property name='x-hv-max-vps' type='number' value='-1'/>
++    <property name='nodeid-msr' type='boolean' value='false'/>
++    <property name='kvm' type='boolean' value='true' migratable='yes'/>
++    <property name='misalignsse' type='boolean' value='false'/>
++    <property name='min-xlevel' type='number' value='2147483658'/>
++    <property name='kvm-pv-unhalt' type='boolean' value='false'/>
++    <property name='bmi2' type='boolean' value='true' migratable='yes'/>
++    <property name='bmi1' type='boolean' value='true' migratable='yes'/>
++    <property name='realized' type='boolean' value='false'/>
++    <property name='tsc_scale' type='boolean' value='false'/>
++    <property name='tsc-scale' type='boolean' value='false'/>
++    <property name='topoext' type='boolean' value='false'/>
++    <property name='hv-vpindex' type='boolean' value='false'/>
++    <property name='xlevel2' type='number' value='0'/>
++    <property name='clflushopt' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-no-smi-migration' type='boolean' value='false'/>
++    <property name='monitor' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512er' type='boolean' value='false'/>
++    <property name='pmm-en' type='boolean' value='false'/>
++    <property name='pcid' type='boolean' value='false'/>
++    <property name='3dnow' type='boolean' value='true' migratable='yes'/>
++    <property name='erms' type='boolean' value='true' migratable='yes'/>
++    <property name='lahf-lm' type='boolean' value='true' migratable='yes'/>
++    <property name='lahf_lm' type='boolean' value='true' migratable='yes'/>
++    <property name='fxsr-opt' type='boolean' value='false'/>
++    <property name='hv-synic' type='boolean' value='false'/>
++    <property name='xstore' type='boolean' value='false'/>
++    <property name='fxsr_opt' type='boolean' value='false'/>
++    <property name='rtm' type='boolean' value='false'/>
++    <property name='lmce' type='boolean' value='false'/>
++    <property name='hv-time' type='boolean' value='false'/>
++    <property name='perfctr-nb' type='boolean' value='false'/>
++    <property name='perfctr_nb' type='boolean' value='false'/>
++    <property name='ffxsr' type='boolean' value='false'/>
++    <property name='rdrand' type='boolean' value='false'/>
++    <property name='rdseed' type='boolean' value='false'/>
++    <property name='avx512-4vnniw' type='boolean' value='false'/>
++    <property name='vmx' type='boolean' value='false'/>
++    <property name='vme' type='boolean' value='false'/>
++    <property name='dtes64' type='boolean' value='false'/>
++    <property name='mtrr' type='boolean' value='true' migratable='yes'/>
++    <property name='rdtscp' type='boolean' value='true' migratable='yes'/>
++    <property name='pse36' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-pv-tlb-flush' type='boolean' value='false'/>
++    <property name='tbm' type='boolean' value='false'/>
++    <property name='wdt' type='boolean' value='false'/>
++    <property name='pause_filter' type='boolean' value='false'/>
++    <property name='sha-ni' type='boolean' value='false'/>
++    <property name='model-id' type='string' value='QEMU TCG CPU version 2.5+'/>
++    <property name='abm' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512pf' type='boolean' value='false'/>
++    <property name='xstore-en' type='boolean' value='false'/>
++  </hostCPU>
++  <cpu type='kvm' name='max' usable='yes'/>
++  <cpu type='kvm' name='host' usable='yes'/>
++  <cpu type='kvm' name='base' usable='yes'/>
++  <cpu type='kvm' name='qemu64' usable='yes'/>
++  <cpu type='kvm' name='qemu32' usable='yes'/>
++  <cpu type='kvm' name='phenom' usable='no'>
++    <blocker name='mmxext'/>
++    <blocker name='fxsr-opt'/>
++    <blocker name='3dnowext'/>
++    <blocker name='3dnow'/>
++    <blocker name='sse4a'/>
++    <blocker name='npt'/>
++  </cpu>
++  <cpu type='kvm' name='pentium3' usable='yes'/>
++  <cpu type='kvm' name='pentium2' usable='yes'/>
++  <cpu type='kvm' name='pentium' usable='yes'/>
++  <cpu type='kvm' name='n270' usable='yes'/>
++  <cpu type='kvm' name='kvm64' usable='yes'/>
++  <cpu type='kvm' name='kvm32' usable='yes'/>
++  <cpu type='kvm' name='coreduo' usable='yes'/>
++  <cpu type='kvm' name='core2duo' usable='yes'/>
++  <cpu type='kvm' name='athlon' usable='no'>
++    <blocker name='mmxext'/>
++    <blocker name='3dnowext'/>
++    <blocker name='3dnow'/>
++  </cpu>
++  <cpu type='kvm' name='Westmere' usable='yes'/>
++  <cpu type='kvm' name='Skylake-Server' usable='no'>
++    <blocker name='avx512f'/>
++    <blocker name='avx512dq'/>
++    <blocker name='clwb'/>
++    <blocker name='avx512cd'/>
++    <blocker name='avx512bw'/>
++    <blocker name='avx512vl'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512f'/>
++  </cpu>
++  <cpu type='kvm' name='Skylake-Client' usable='yes'/>
++  <cpu type='kvm' name='SandyBridge' usable='yes'/>
++  <cpu type='kvm' name='Penryn' usable='yes'/>
++  <cpu type='kvm' name='Opteron_G5' usable='no'>
++    <blocker name='sse4a'/>
++    <blocker name='misalignsse'/>
++    <blocker name='xop'/>
++    <blocker name='fma4'/>
++    <blocker name='tbm'/>
++  </cpu>
++  <cpu type='kvm' name='Opteron_G4' usable='no'>
++    <blocker name='sse4a'/>
++    <blocker name='misalignsse'/>
++    <blocker name='xop'/>
++    <blocker name='fma4'/>
++  </cpu>
++  <cpu type='kvm' name='Opteron_G3' usable='no'>
++    <blocker name='sse4a'/>
++    <blocker name='misalignsse'/>
++  </cpu>
++  <cpu type='kvm' name='Opteron_G2' usable='yes'/>
++  <cpu type='kvm' name='Opteron_G1' usable='yes'/>
++  <cpu type='kvm' name='Nehalem' usable='yes'/>
++  <cpu type='kvm' name='IvyBridge' usable='yes'/>
++  <cpu type='kvm' name='Haswell' usable='yes'/>
++  <cpu type='kvm' name='Haswell-noTSX' usable='yes'/>
++  <cpu type='kvm' name='EPYC' usable='no'>
++    <blocker name='sha-ni'/>
++    <blocker name='mmxext'/>
++    <blocker name='fxsr-opt'/>
++    <blocker name='cr8legacy'/>
++    <blocker name='sse4a'/>
++    <blocker name='misalignsse'/>
++    <blocker name='osvw'/>
++  </cpu>
++  <cpu type='kvm' name='Conroe' usable='yes'/>
++  <cpu type='kvm' name='Broadwell' usable='yes'/>
++  <cpu type='kvm' name='Broadwell-noTSX' usable='yes'/>
++  <cpu type='kvm' name='486' usable='yes'/>
++  <cpu type='tcg' name='max' usable='yes'/>
++  <cpu type='tcg' name='host' usable='no'>
++    <blocker name='kvm'/>
++  </cpu>
++  <cpu type='tcg' name='base' usable='yes'/>
++  <cpu type='tcg' name='qemu64' usable='yes'/>
++  <cpu type='tcg' name='qemu32' usable='yes'/>
++  <cpu type='tcg' name='phenom' usable='no'>
++    <blocker name='fxsr-opt'/>
++    <blocker name='npt'/>
++  </cpu>
++  <cpu type='tcg' name='pentium3' usable='yes'/>
++  <cpu type='tcg' name='pentium2' usable='yes'/>
++  <cpu type='tcg' name='pentium' usable='yes'/>
++  <cpu type='tcg' name='n270' usable='yes'/>
++  <cpu type='tcg' name='kvm64' usable='yes'/>
++  <cpu type='tcg' name='kvm32' usable='yes'/>
++  <cpu type='tcg' name='coreduo' usable='yes'/>
++  <cpu type='tcg' name='core2duo' usable='yes'/>
++  <cpu type='tcg' name='athlon' usable='yes'/>
++  <cpu type='tcg' name='Westmere' usable='yes'/>
++  <cpu type='tcg' name='Skylake-Server' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512dq'/>
++    <blocker name='rdseed'/>
++    <blocker name='avx512cd'/>
++    <blocker name='avx512bw'/>
++    <blocker name='avx512vl'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='xsavec'/>
++  </cpu>
++  <cpu type='tcg' name='Skylake-Client' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++    <blocker name='rdseed'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='xsavec'/>
++  </cpu>
++  <cpu type='tcg' name='SandyBridge' usable='no'>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++  </cpu>
++  <cpu type='tcg' name='Penryn' usable='yes'/>
++  <cpu type='tcg' name='Opteron_G5' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='misalignsse'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='xop'/>
++    <blocker name='fma4'/>
++    <blocker name='tbm'/>
++  </cpu>
++  <cpu type='tcg' name='Opteron_G4' usable='no'>
++    <blocker name='avx'/>
++    <blocker name='misalignsse'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='xop'/>
++    <blocker name='fma4'/>
++  </cpu>
++  <cpu type='tcg' name='Opteron_G3' usable='no'>
++    <blocker name='misalignsse'/>
++  </cpu>
++  <cpu type='tcg' name='Opteron_G2' usable='yes'/>
++  <cpu type='tcg' name='Opteron_G1' usable='yes'/>
++  <cpu type='tcg' name='Nehalem' usable='yes'/>
++  <cpu type='tcg' name='IvyBridge' usable='no'>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++  </cpu>
++  <cpu type='tcg' name='Haswell' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++  </cpu>
++  <cpu type='tcg' name='Haswell-noTSX' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++  </cpu>
++  <cpu type='tcg' name='EPYC' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='avx2'/>
++    <blocker name='rdseed'/>
++    <blocker name='sha-ni'/>
++    <blocker name='fxsr-opt'/>
++    <blocker name='misalignsse'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='osvw'/>
++    <blocker name='xsavec'/>
++  </cpu>
++  <cpu type='tcg' name='Conroe' usable='yes'/>
++  <cpu type='tcg' name='Broadwell' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++    <blocker name='rdseed'/>
++    <blocker name='3dnowprefetch'/>
++  </cpu>
++  <cpu type='tcg' name='Broadwell-noTSX' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rdseed'/>
++    <blocker name='3dnowprefetch'/>
++  </cpu>
++  <cpu type='tcg' name='486' usable='yes'/>
++  <machine name='pc-i440fx-2.11' alias='pc' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-0.12' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.4' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-1.3' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.7' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.6' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-1.7' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.8' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-1.6' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.7' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.10' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-0.11' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.3' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-0.10' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-1.2' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.2' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='isapc' hotplugCpus='yes' maxCpus='1'/>
++  <machine name='pc-q35-2.5' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-0.15' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-0.14' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-1.5' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.6' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-1.4' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.5' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.9' hotplugCpus='yes' maxCpus='288'/>
++  <machine name='pc-1.1' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.1' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.8' hotplugCpus='yes' maxCpus='288'/>
++  <machine name='pc-1.0' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.0' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.4' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.9' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.11' alias='q35' hotplugCpus='yes' maxCpus='288'/>
++  <machine name='pc-0.13' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.10' hotplugCpus='yes' maxCpus='288'/>
++</qemuCaps>
+diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c
+index 0813672537..4aec175968 100644
+--- a/tests/qemucapabilitiestest.c
++++ b/tests/qemucapabilitiestest.c
+@@ -174,6 +174,7 @@ mymain(void)
+     DO_TEST("x86_64", "caps_2.8.0");
+     DO_TEST("x86_64", "caps_2.9.0");
+     DO_TEST("x86_64", "caps_2.10.0");
++    DO_TEST("x86_64", "caps_2.11.0");
+     DO_TEST("x86_64", "caps_2.12.0");
+     DO_TEST("x86_64", "caps_3.0.0");
+     DO_TEST("aarch64", "caps_2.6.0");
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-Add-capabilities-data-for-QEMU-3.1.0-on-ppc64.patch b/SOURCES/libvirt-tests-Add-capabilities-data-for-QEMU-3.1.0-on-ppc64.patch
new file mode 100644
index 0000000..8c40181
--- /dev/null
+++ b/SOURCES/libvirt-tests-Add-capabilities-data-for-QEMU-3.1.0-on-ppc64.patch
@@ -0,0 +1,24815 @@
+From 2166e637bd0b124581058dfc660cd951484748c1 Mon Sep 17 00:00:00 2001
+Message-Id: <2166e637bd0b124581058dfc660cd951484748c1@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Tue, 4 Dec 2018 16:46:17 +0100
+Subject: [PATCH] tests: Add capabilities data for QEMU 3.1.0 on ppc64
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit e95bcd8d187b2fe0d92816f81ca05a15f81ca111)
+
+No conflicts, but
+
+  tests/qemucapabilitiesdata/caps_3.1.0.ppc64.replies
+  tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
+  tests/qemucaps2xmloutdata/caps_3.1.0.ppc64.xml
+
+had to be tweaked because we're missing
+
+  22d8f55b21 qemu: capabilities: Detect active block commit via QMP schema probing if possible
+  f2019083de qemu: capabilities: Always assume QEMU_CAPS_ADD_FD
+  4168e33755 qemu: remove leftover property probing
+  b37b41f868 qemu: Don't duplicate binary name in capabilities
+  21b18ea5d9 qemu: add memory-backend-memfd capability check
+  a6fd5b596a qemu: check memory-backend-memfd.hugetlb capability
+  9aec374b01 qemu: Detect whether iothread polling is supported
+
+downstream.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1647822
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ .../caps_3.1.0.ppc64.replies                  | 23616 ++++++++++++++++
+ .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml |  1081 +
+ tests/qemucapabilitiestest.c                  |     1 +
+ .../qemucaps2xmloutdata/caps_3.1.0.ppc64.xml  |    28 +
+ tests/qemucaps2xmltest.c                      |     1 +
+ 5 files changed, 24727 insertions(+)
+ create mode 100644 tests/qemucapabilitiesdata/caps_3.1.0.ppc64.replies
+ create mode 100644 tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_3.1.0.ppc64.xml
+
+diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.replies b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.replies
+new file mode 100644
+index 0000000000..576e0b69e9
+--- /dev/null
++++ b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.replies
+@@ -0,0 +1,23616 @@
++{
++  "execute": "qmp_capabilities",
++  "id": "libvirt-1"
++}
++
++{
++  "return": {
++  },
++  "id": "libvirt-1"
++}
++
++{
++  "execute": "query-version",
++  "id": "libvirt-2"
++}
++
++{
++  "return": {
++    "qemu": {
++      "micro": 91,
++      "minor": 0,
++      "major": 3
++    },
++    "package": "v3.1.0-rc1-74-g3c035a41dc"
++  },
++  "id": "libvirt-2"
++}
++
++{
++  "execute": "query-target",
++  "id": "libvirt-3"
++}
++
++{
++  "return": {
++    "arch": "ppc64"
++  },
++  "id": "libvirt-3"
++}
++
++{
++  "execute": "query-commands",
++  "id": "libvirt-4"
++}
++
++{
++  "return": [
++    {
++      "name": "netdev_add"
++    },
++    {
++      "name": "device_add"
++    },
++    {
++      "name": "query-qmp-schema"
++    },
++    {
++      "name": "set-numa-node"
++    },
++    {
++      "name": "query-vm-generation-id"
++    },
++    {
++      "name": "query-hotpluggable-cpus"
++    },
++    {
++      "name": "xen-load-devices-state"
++    },
++    {
++      "name": "query-acpi-ospm-status"
++    },
++    {
++      "name": "query-memory-devices"
++    },
++    {
++      "name": "query-memdev"
++    },
++    {
++      "name": "query-command-line-options"
++    },
++    {
++      "name": "query-target"
++    },
++    {
++      "name": "query-fdsets"
++    },
++    {
++      "name": "remove-fd"
++    },
++    {
++      "name": "add-fd"
++    },
++    {
++      "name": "query-cpu-definitions"
++    },
++    {
++      "name": "query-memory-size-summary"
++    },
++    {
++      "name": "query-machines"
++    },
++    {
++      "name": "closefd"
++    },
++    {
++      "name": "getfd"
++    },
++    {
++      "name": "object-del"
++    },
++    {
++      "name": "object-add"
++    },
++    {
++      "name": "query-dump-guest-memory-capability"
++    },
++    {
++      "name": "query-dump"
++    },
++    {
++      "name": "dump-guest-memory"
++    },
++    {
++      "name": "device_del"
++    },
++    {
++      "name": "xen-set-global-dirty-log"
++    },
++    {
++      "name": "qom-list-properties"
++    },
++    {
++      "name": "device-list-properties"
++    },
++    {
++      "name": "qom-list-types"
++    },
++    {
++      "name": "change"
++    },
++    {
++      "name": "qom-set"
++    },
++    {
++      "name": "qom-get"
++    },
++    {
++      "name": "qom-list"
++    },
++    {
++      "name": "human-monitor-command"
++    },
++    {
++      "name": "balloon"
++    },
++    {
++      "name": "inject-nmi"
++    },
++    {
++      "name": "system_wakeup"
++    },
++    {
++      "name": "x-exit-preconfig"
++    },
++    {
++      "name": "cont"
++    },
++    {
++      "name": "pmemsave"
++    },
++    {
++      "name": "memsave"
++    },
++    {
++      "name": "cpu-add"
++    },
++    {
++      "name": "system_powerdown"
++    },
++    {
++      "name": "system_reset"
++    },
++    {
++      "name": "stop"
++    },
++    {
++      "name": "quit"
++    },
++    {
++      "name": "query-pci"
++    },
++    {
++      "name": "query-balloon"
++    },
++    {
++      "name": "query-iothreads"
++    },
++    {
++      "name": "query-cpus-fast"
++    },
++    {
++      "name": "query-cpus"
++    },
++    {
++      "name": "query-events"
++    },
++    {
++      "name": "query-uuid"
++    },
++    {
++      "name": "query-kvm"
++    },
++    {
++      "name": "query-name"
++    },
++    {
++      "name": "add_client"
++    },
++    {
++      "name": "query-commands"
++    },
++    {
++      "name": "query-version"
++    },
++    {
++      "name": "qmp_capabilities"
++    },
++    {
++      "name": "trace-event-set-state"
++    },
++    {
++      "name": "trace-event-get-state"
++    },
++    {
++      "name": "transaction"
++    },
++    {
++      "name": "migrate-pause"
++    },
++    {
++      "name": "migrate-recover"
++    },
++    {
++      "name": "query-colo-status"
++    },
++    {
++      "name": "xen-colo-do-checkpoint"
++    },
++    {
++      "name": "query-xen-replication-status"
++    },
++    {
++      "name": "xen-set-replication"
++    },
++    {
++      "name": "xen-save-devices-state"
++    },
++    {
++      "name": "migrate-incoming"
++    },
++    {
++      "name": "migrate"
++    },
++    {
++      "name": "query-migrate-cache-size"
++    },
++    {
++      "name": "migrate-set-cache-size"
++    },
++    {
++      "name": "migrate_set_speed"
++    },
++    {
++      "name": "migrate_set_downtime"
++    },
++    {
++      "name": "migrate-continue"
++    },
++    {
++      "name": "migrate_cancel"
++    },
++    {
++      "name": "x-colo-lost-heartbeat"
++    },
++    {
++      "name": "migrate-start-postcopy"
++    },
++    {
++      "name": "client_migrate_info"
++    },
++    {
++      "name": "query-migrate-parameters"
++    },
++    {
++      "name": "migrate-set-parameters"
++    },
++    {
++      "name": "query-migrate-capabilities"
++    },
++    {
++      "name": "migrate-set-capabilities"
++    },
++    {
++      "name": "query-migrate"
++    },
++    {
++      "name": "input-send-event"
++    },
++    {
++      "name": "send-key"
++    },
++    {
++      "name": "query-mice"
++    },
++    {
++      "name": "change-vnc-password"
++    },
++    {
++      "name": "query-vnc-servers"
++    },
++    {
++      "name": "query-vnc"
++    },
++    {
++      "name": "screendump"
++    },
++    {
++      "name": "expire_password"
++    },
++    {
++      "name": "set_password"
++    },
++    {
++      "name": "query-tpm"
++    },
++    {
++      "name": "query-tpm-types"
++    },
++    {
++      "name": "query-tpm-models"
++    },
++    {
++      "name": "query-rocker-of-dpa-groups"
++    },
++    {
++      "name": "query-rocker-of-dpa-flows"
++    },
++    {
++      "name": "query-rocker-ports"
++    },
++    {
++      "name": "query-rocker"
++    },
++    {
++      "name": "query-rx-filter"
++    },
++    {
++      "name": "netdev_del"
++    },
++    {
++      "name": "set_link"
++    },
++    {
++      "name": "chardev-send-break"
++    },
++    {
++      "name": "chardev-remove"
++    },
++    {
++      "name": "chardev-change"
++    },
++    {
++      "name": "chardev-add"
++    },
++    {
++      "name": "ringbuf-read"
++    },
++    {
++      "name": "ringbuf-write"
++    },
++    {
++      "name": "query-chardev-backends"
++    },
++    {
++      "name": "query-chardev"
++    },
++    {
++      "name": "nbd-server-stop"
++    },
++    {
++      "name": "x-nbd-server-add-bitmap"
++    },
++    {
++      "name": "nbd-server-remove"
++    },
++    {
++      "name": "nbd-server-add"
++    },
++    {
++      "name": "nbd-server-start"
++    },
++    {
++      "name": "eject"
++    },
++    {
++      "name": "blockdev-snapshot-delete-internal-sync"
++    },
++    {
++      "name": "blockdev-snapshot-internal-sync"
++    },
++    {
++      "name": "query-pr-managers"
++    },
++    {
++      "name": "x-blockdev-set-iothread"
++    },
++    {
++      "name": "x-blockdev-change"
++    },
++    {
++      "name": "block-set-write-threshold"
++    },
++    {
++      "name": "blockdev-change-medium"
++    },
++    {
++      "name": "blockdev-insert-medium"
++    },
++    {
++      "name": "blockdev-remove-medium"
++    },
++    {
++      "name": "blockdev-close-tray"
++    },
++    {
++      "name": "blockdev-open-tray"
++    },
++    {
++      "name": "blockdev-create"
++    },
++    {
++      "name": "blockdev-del"
++    },
++    {
++      "name": "blockdev-add"
++    },
++    {
++      "name": "block-job-finalize"
++    },
++    {
++      "name": "block-job-dismiss"
++    },
++    {
++      "name": "block-job-complete"
++    },
++    {
++      "name": "block-job-resume"
++    },
++    {
++      "name": "block-job-pause"
++    },
++    {
++      "name": "block-job-cancel"
++    },
++    {
++      "name": "block-job-set-speed"
++    },
++    {
++      "name": "block-stream"
++    },
++    {
++      "name": "block_set_io_throttle"
++    },
++    {
++      "name": "blockdev-mirror"
++    },
++    {
++      "name": "x-debug-block-dirty-bitmap-sha256"
++    },
++    {
++      "name": "x-block-dirty-bitmap-merge"
++    },
++    {
++      "name": "x-block-dirty-bitmap-disable"
++    },
++    {
++      "name": "x-block-dirty-bitmap-enable"
++    },
++    {
++      "name": "block-dirty-bitmap-clear"
++    },
++    {
++      "name": "block-dirty-bitmap-remove"
++    },
++    {
++      "name": "block-dirty-bitmap-add"
++    },
++    {
++      "name": "drive-mirror"
++    },
++    {
++      "name": "query-named-block-nodes"
++    },
++    {
++      "name": "blockdev-backup"
++    },
++    {
++      "name": "drive-backup"
++    },
++    {
++      "name": "block-commit"
++    },
++    {
++      "name": "change-backing-file"
++    },
++    {
++      "name": "blockdev-snapshot"
++    },
++    {
++      "name": "blockdev-snapshot-sync"
++    },
++    {
++      "name": "block_resize"
++    },
++    {
++      "name": "block_passwd"
++    },
++    {
++      "name": "query-block-jobs"
++    },
++    {
++      "name": "query-blockstats"
++    },
++    {
++      "name": "query-block"
++    },
++    {
++      "name": "x-block-latency-histogram-set"
++    },
++    {
++      "name": "query-jobs"
++    },
++    {
++      "name": "job-finalize"
++    },
++    {
++      "name": "job-dismiss"
++    },
++    {
++      "name": "job-complete"
++    },
++    {
++      "name": "job-cancel"
++    },
++    {
++      "name": "job-resume"
++    },
++    {
++      "name": "job-pause"
++    },
++    {
++      "name": "watchdog-set-action"
++    },
++    {
++      "name": "query-status"
++    }
++  ],
++  "id": "libvirt-4"
++}
++
++{
++  "execute": "add-fd",
++  "arguments": {
++    "fdset-id": 0,
++    "opaque": "/dev/null"
++  },
++  "id": "libvirt-5"
++}
++
++{
++  "return": {
++    "fd": 19,
++    "fdset-id": 0
++  },
++  "id": "libvirt-5"
++}
++
++{
++  "execute": "block-commit",
++  "arguments": {
++    "device": "bogus"
++  },
++  "id": "libvirt-6"
++}
++
++{
++  "id": "libvirt-6",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'bogus' not found"
++  }
++}
++
++{
++  "execute": "query-kvm",
++  "id": "libvirt-7"
++}
++
++{
++  "return": {
++    "enabled": true,
++    "present": true
++  },
++  "id": "libvirt-7"
++}
++
++{
++  "execute": "query-events",
++  "id": "libvirt-8"
++}
++
++{
++  "return": [
++    {
++      "name": "COMMAND_DROPPED"
++    },
++    {
++      "name": "RTC_CHANGE"
++    },
++    {
++      "name": "ACPI_DEVICE_OST"
++    },
++    {
++      "name": "MEM_UNPLUG_ERROR"
++    },
++    {
++      "name": "DUMP_COMPLETED"
++    },
++    {
++      "name": "DEVICE_DELETED"
++    },
++    {
++      "name": "BALLOON_CHANGE"
++    },
++    {
++      "name": "COLO_EXIT"
++    },
++    {
++      "name": "MIGRATION_PASS"
++    },
++    {
++      "name": "MIGRATION"
++    },
++    {
++      "name": "VNC_DISCONNECTED"
++    },
++    {
++      "name": "VNC_INITIALIZED"
++    },
++    {
++      "name": "VNC_CONNECTED"
++    },
++    {
++      "name": "SPICE_MIGRATE_COMPLETED"
++    },
++    {
++      "name": "SPICE_DISCONNECTED"
++    },
++    {
++      "name": "SPICE_INITIALIZED"
++    },
++    {
++      "name": "SPICE_CONNECTED"
++    },
++    {
++      "name": "NIC_RX_FILTER_CHANGED"
++    },
++    {
++      "name": "VSERPORT_CHANGE"
++    },
++    {
++      "name": "QUORUM_REPORT_BAD"
++    },
++    {
++      "name": "QUORUM_FAILURE"
++    },
++    {
++      "name": "PR_MANAGER_STATUS_CHANGED"
++    },
++    {
++      "name": "DEVICE_TRAY_MOVED"
++    },
++    {
++      "name": "BLOCK_WRITE_THRESHOLD"
++    },
++    {
++      "name": "BLOCK_JOB_PENDING"
++    },
++    {
++      "name": "BLOCK_JOB_READY"
++    },
++    {
++      "name": "BLOCK_JOB_ERROR"
++    },
++    {
++      "name": "BLOCK_JOB_CANCELLED"
++    },
++    {
++      "name": "BLOCK_JOB_COMPLETED"
++    },
++    {
++      "name": "BLOCK_IO_ERROR"
++    },
++    {
++      "name": "BLOCK_IMAGE_CORRUPTED"
++    },
++    {
++      "name": "JOB_STATUS_CHANGE"
++    },
++    {
++      "name": "GUEST_PANICKED"
++    },
++    {
++      "name": "WATCHDOG"
++    },
++    {
++      "name": "WAKEUP"
++    },
++    {
++      "name": "SUSPEND_DISK"
++    },
++    {
++      "name": "SUSPEND"
++    },
++    {
++      "name": "RESUME"
++    },
++    {
++      "name": "STOP"
++    },
++    {
++      "name": "RESET"
++    },
++    {
++      "name": "POWERDOWN"
++    },
++    {
++      "name": "SHUTDOWN"
++    }
++  ],
++  "id": "libvirt-8"
++}
++
++{
++  "execute": "qom-list-types",
++  "id": "libvirt-9"
++}
++
++{
++  "return": [
++    {
++      "name": "vhost-vsock-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "scsi-generic",
++      "parent": "scsi-device"
++    },
++    {
++      "name": "qio-channel-tls",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "scsi-hd",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "chardev-parallel",
++      "parent": "chardev"
++    },
++    {
++      "name": "mpc8568e-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "power7+_v2.1-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "usb-bot",
++      "parent": "usb-storage-dev"
++    },
++    {
++      "name": "chardev-null",
++      "parent": "chardev"
++    },
++    {
++      "name": "40p-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "power5+_v2.1-powerpc64-cpu",
++      "parent": "POWER5P-family-powerpc64-cpu"
++    },
++    {
++      "name": "isa-m48t59",
++      "parent": "isa-m48txx"
++    },
++    {
++      "name": "qemu-xhci",
++      "parent": "base-xhci"
++    },
++    {
++      "name": "lsi53c895a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "750_v3.1-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc5200_v10-powerpc64-cpu",
++      "parent": "G2LE-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8533e_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8343e-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "npe405h2-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "e300c2-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "403gb-powerpc64-cpu",
++      "parent": "403-family-powerpc64-cpu"
++    },
++    {
++      "name": "7447a_v1.1-powerpc64-cpu",
++      "parent": "7445-family-powerpc64-cpu"
++    },
++    {
++      "name": "power8e_v2.1-powerpc64-cpu",
++      "parent": "POWER8-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8555e_v11-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "pr-manager-helper",
++      "parent": "pr-manager"
++    },
++    {
++      "name": "dec-21154",
++      "parent": "pci-device"
++    },
++    {
++      "name": "750cxe_v3.1-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8541e_v11-powerpc64-cpu",
++      "parent": "e500v1-family-powerpc64-cpu"
++    },
++    {
++      "name": "401-powerpc64-cpu",
++      "parent": "401-family-powerpc64-cpu"
++    },
++    {
++      "name": "750cxr-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "750cl_v2.0-powerpc64-cpu",
++      "parent": "750cl-family-powerpc64-cpu"
++    },
++    {
++      "name": "power8_v2.0-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "745_v1.0-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "ide-hd",
++      "parent": "ide-device"
++    },
++    {
++      "name": "at24c-eeprom",
++      "parent": "i2c-slave"
++    },
++    {
++      "name": "g2legp1-powerpc64-cpu",
++      "parent": "G2LE-family-powerpc64-cpu"
++    },
++    {
++      "name": "virtio-net-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "ppc4xx-i2c",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "601_v0-powerpc64-cpu",
++      "parent": "601-family-powerpc64-cpu"
++    },
++    {
++      "name": "macio-newworld",
++      "parent": "macio"
++    },
++    {
++      "name": "chardev-pty",
++      "parent": "chardev"
++    },
++    {
++      "name": "ppc4xx-pcihost",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "spapr-vio-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "ppc4xx-host-bridge",
++      "parent": "pci-device"
++    },
++    {
++      "name": "750fx_v2.1-powerpc64-cpu",
++      "parent": "750fx-family-powerpc64-cpu"
++    },
++    {
++      "name": "iop480-powerpc64-cpu",
++      "parent": "IOP480-family-powerpc64-cpu"
++    },
++    {
++      "name": "usb-audio",
++      "parent": "usb-device"
++    },
++    {
++      "name": "power7_v2.3-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "970fx_v2.1-powerpc64-cpu",
++      "parent": "970-family-powerpc64-cpu"
++    },
++    {
++      "name": "SUNW,fdtwo",
++      "parent": "base-sysbus-fdc"
++    },
++    {
++      "name": "440epa-powerpc64-cpu",
++      "parent": "440EP-family-powerpc64-cpu"
++    },
++    {
++      "name": "isa-pcspk",
++      "parent": "isa-device"
++    },
++    {
++      "name": "dec-21154-p2p-bridge",
++      "parent": "base-pci-bridge"
++    },
++    {
++      "name": "pnv8-chip",
++      "parent": "pnv-chip"
++    },
++    {
++      "name": "7445_v3.3-powerpc64-cpu",
++      "parent": "7445-family-powerpc64-cpu"
++    },
++    {
++      "name": "603e_v4.1-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc603-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "filter-rewriter",
++      "parent": "netfilter"
++    },
++    {
++      "name": "spapr-vscsi",
++      "parent": "vio-spapr-device"
++    },
++    {
++      "name": "loader",
++      "parent": "device"
++    },
++    {
++      "name": "xlnx.xps-ethernetlite",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "7410_v1.0-powerpc64-cpu",
++      "parent": "7410-family-powerpc64-cpu"
++    },
++    {
++      "name": "platform-bus-device",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "virtio-serial-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "ics",
++      "parent": "ics-base"
++    },
++    {
++      "name": "750cxe_v2.4b-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8641-powerpc64-cpu",
++      "parent": "e600-family-powerpc64-cpu"
++    },
++    {
++      "name": "sysbus-sm501",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "icp",
++      "parent": "device"
++    },
++    {
++      "name": "virtio-crypto-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "usb-host",
++      "parent": "usb-device"
++    },
++    {
++      "name": "mpc8379e-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "745_v2.5-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "chardev-socket",
++      "parent": "chardev"
++    },
++    {
++      "name": "970fx_v3.1-powerpc64-cpu",
++      "parent": "970-family-powerpc64-cpu"
++    },
++    {
++      "name": "7447_v1.0-powerpc64-cpu",
++      "parent": "7445-family-powerpc64-cpu"
++    },
++    {
++      "name": "7457_v1.2-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "usb-bt-dongle",
++      "parent": "usb-device"
++    },
++    {
++      "name": "filter-redirector",
++      "parent": "netfilter"
++    },
++    {
++      "name": "mpc8567-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "xlnx,ps7-usb",
++      "parent": "sysbus-ehci-usb"
++    },
++    {
++      "name": "virtio-input-host-pci",
++      "parent": "virtio-input-pci"
++    },
++    {
++      "name": "xlnx.xps-intc",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "tegra2-ehci-usb",
++      "parent": "sysbus-ehci-usb"
++    },
++    {
++      "name": "mpc8378-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8xxx_gpio",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "e1000",
++      "parent": "e1000-base"
++    },
++    {
++      "name": "mpc8545e_v20-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "pseries-2.1-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "pci-bridge",
++      "parent": "base-pci-bridge"
++    },
++    {
++      "name": "ich9-usb-uhci6",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "ich9-usb-uhci5",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "usb-mtp",
++      "parent": "usb-device"
++    },
++    {
++      "name": "ich9-usb-uhci3",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "mpc8548e_v20-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "ich9-usb-uhci4",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "sysbus-ahci",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "e500v2_v22-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "ich9-usb-uhci2",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "ich9-usb-uhci1",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "sysbus-m48t59",
++      "parent": "sysbus-m48txx"
++    },
++    {
++      "name": "tls-creds-psk",
++      "parent": "tls-creds"
++    },
++    {
++      "name": "i82559er",
++      "parent": "pci-device"
++    },
++    {
++      "name": "tpci200",
++      "parent": "pci-device"
++    },
++    {
++      "name": "memory-backend-file",
++      "parent": "memory-backend"
++    },
++    {
++      "name": "604r-powerpc64-cpu",
++      "parent": "604E-family-powerpc64-cpu"
++    },
++    {
++      "name": "vhost-scsi-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "megasas",
++      "parent": "megasas-base"
++    },
++    {
++      "name": "uni-north-internal-pci-pcihost",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "container",
++      "parent": "object"
++    },
++    {
++      "name": "603e7v2-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "970mp_v1.1-powerpc64-cpu",
++      "parent": "970-family-powerpc64-cpu"
++    },
++    {
++      "name": "rtl8139",
++      "parent": "pci-device"
++    },
++    {
++      "name": "7450_v2.0-powerpc64-cpu",
++      "parent": "7450-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8544e_v11-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "chardev-hci",
++      "parent": "chardev"
++    },
++    {
++      "name": "power7+_v2.1-powerpc64-cpu",
++      "parent": "POWER7-family-powerpc64-cpu"
++    },
++    {
++      "name": "405gpc-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "7455_v2.1-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "7400_v2.8-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "u3-agp",
++      "parent": "pci-device"
++    },
++    {
++      "name": "401g2-powerpc64-cpu",
++      "parent": "401x2-family-powerpc64-cpu"
++    },
++    {
++      "name": "603e_v1.1-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "scsi-block",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "7451_v2.3-powerpc64-cpu",
++      "parent": "7450-family-powerpc64-cpu"
++    },
++    {
++      "name": "unimplemented-device",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "mpc8533e_v11-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "eTSEC",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "mac-dbdma",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "mpc8567e-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "uni-north-agp",
++      "parent": "pci-device"
++    },
++    {
++      "name": "scsi-cd",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "floppy-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "accel",
++      "parent": "object"
++    },
++    {
++      "name": "740p-powerpc64-cpu",
++      "parent": "740-family-powerpc64-cpu"
++    },
++    {
++      "name": "power5+_v2.1-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "ppc440-pcix-host",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "xlnx.xps-timer",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "virtio-vga",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "isa-serial",
++      "parent": "isa-device"
++    },
++    {
++      "name": "g2hip4-powerpc64-cpu",
++      "parent": "G2-family-powerpc64-cpu"
++    },
++    {
++      "name": "spapr-rng",
++      "parent": "device"
++    },
++    {
++      "name": "via-pmu",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "g2lels-powerpc64-cpu",
++      "parent": "G2LE-family-powerpc64-cpu"
++    },
++    {
++      "name": "virtio-serial-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "970_v2.2-powerpc64-cpu",
++      "parent": "970-family-powerpc64-cpu"
++    },
++    {
++      "name": "gpio_i2c",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "pc-testdev",
++      "parent": "isa-device"
++    },
++    {
++      "name": "escc",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "mpc8349e-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "chardev-gdb",
++      "parent": "chardev"
++    },
++    {
++      "name": "fdc37m81x-superio",
++      "parent": "isa-superio"
++    },
++    {
++      "name": "icskvm",
++      "parent": "ics-base"
++    },
++    {
++      "name": "tls-creds-anon",
++      "parent": "tls-creds"
++    },
++    {
++      "name": "fw_cfg_mem",
++      "parent": "fw_cfg"
++    },
++    {
++      "name": "603e_v3-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "pseries-2.3-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "taihu-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "npe4gs3-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "icp-kvm",
++      "parent": "icp"
++    },
++    {
++      "name": "440epb-powerpc64-cpu",
++      "parent": "440EP-family-powerpc64-cpu"
++    },
++    {
++      "name": "usb-uas",
++      "parent": "usb-device"
++    },
++    {
++      "name": "virtio-balloon-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "ide-cd",
++      "parent": "ide-device"
++    },
++    {
++      "name": "usb-ccid",
++      "parent": "usb-device"
++    },
++    {
++      "name": "chardev-udp",
++      "parent": "chardev"
++    },
++    {
++      "name": "7445_v3.4-powerpc64-cpu",
++      "parent": "7445-family-powerpc64-cpu"
++    },
++    {
++      "name": "pseries-2.2-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "750p-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "e6500-powerpc64-cpu",
++      "parent": "e6500-family-powerpc64-cpu"
++    },
++    {
++      "name": "sb16",
++      "parent": "isa-device"
++    },
++    {
++      "name": "iothread",
++      "parent": "object"
++    },
++    {
++      "name": "750gl-powerpc64-cpu",
++      "parent": "750gx-family-powerpc64-cpu"
++    },
++    {
++      "name": "bochs-display",
++      "parent": "pci-device"
++    },
++    {
++      "name": "745_v2.1-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "7410_v1.1-powerpc64-cpu",
++      "parent": "7410-family-powerpc64-cpu"
++    },
++    {
++      "name": "755_v2.3-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "vhost-vsock-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "7450_v1.0-powerpc64-cpu",
++      "parent": "7450-family-powerpc64-cpu"
++    },
++    {
++      "name": "qio-channel-rdma",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "750_v2.2-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8347at-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8544_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "405ep-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "sdhci-pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtio-input-host-device",
++      "parent": "virtio-input-device"
++    },
++    {
++      "name": "stb03-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "virtio-rng-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "cs4231a",
++      "parent": "isa-device"
++    },
++    {
++      "name": "745_v2.6-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "heathrow",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "405lp-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "755_v2.8-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "604e_v2.4-powerpc64-cpu",
++      "parent": "604E-family-powerpc64-cpu"
++    },
++    {
++      "name": "ivshmem-doorbell",
++      "parent": "ivshmem-common"
++    },
++    {
++      "name": "750cxe_v2.2-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "750cx_v1.0-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "7457a_v1.2-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "pnv-icp",
++      "parent": "icp"
++    },
++    {
++      "name": "mpc8568-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "isa-parallel",
++      "parent": "isa-device"
++    },
++    {
++      "name": "mpc8555_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "460exb-powerpc64-cpu",
++      "parent": "460EX-family-powerpc64-cpu"
++    },
++    {
++      "name": "spapr-drc-cpu",
++      "parent": "spapr-drc-logical"
++    },
++    {
++      "name": "spapr-iommu-memory-region",
++      "parent": "qemu:iommu-memory-region"
++    },
++    {
++      "name": "mpc8343a-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "adlib",
++      "parent": "isa-device"
++    },
++    {
++      "name": "mpc8378e-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "602-powerpc64-cpu",
++      "parent": "602-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8545e_v21-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "dc390",
++      "parent": "am53c974"
++    },
++    {
++      "name": "hda-micro",
++      "parent": "hda-audio"
++    },
++    {
++      "name": "pci-bridge-seat",
++      "parent": "pci-bridge"
++    },
++    {
++      "name": "IDE",
++      "parent": "bus"
++    },
++    {
++      "name": "740_v3.0-powerpc64-cpu",
++      "parent": "740-family-powerpc64-cpu"
++    },
++    {
++      "name": "7441_v2.1-powerpc64-cpu",
++      "parent": "7440-family-powerpc64-cpu"
++    },
++    {
++      "name": "qemu,register",
++      "parent": "device"
++    },
++    {
++      "name": "pnv-psi",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "mpc5200_v11-powerpc64-cpu",
++      "parent": "G2LE-family-powerpc64-cpu"
++    },
++    {
++      "name": "fw_cfg_io",
++      "parent": "fw_cfg"
++    },
++    {
++      "name": "e300c3-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "403gc-powerpc64-cpu",
++      "parent": "403-family-powerpc64-cpu"
++    },
++    {
++      "name": "7447a_v1.2-powerpc64-cpu",
++      "parent": "7445-family-powerpc64-cpu"
++    },
++    {
++      "name": "sysbus-m48t08",
++      "parent": "sysbus-m48txx"
++    },
++    {
++      "name": "spapr-pci-host-bridge",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "memory-backend-ram",
++      "parent": "memory-backend"
++    },
++    {
++      "name": "am53c974",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pseries-2.5-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "mpc8548e_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "750cx_v2.0-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "virtio-blk-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "chardev-pipe",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "qio-channel-file",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "745_v1.1-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "601_v1-powerpc64-cpu",
++      "parent": "601-family-powerpc64-cpu"
++    },
++    {
++      "name": "sysbus-m48t02",
++      "parent": "sysbus-m48txx"
++    },
++    {
++      "name": "uni-north-pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "740_v1.0-powerpc64-cpu",
++      "parent": "740-family-powerpc64-cpu"
++    },
++    {
++      "name": "qio-channel-websock",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "pseries-2.4-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "mc146818rtc",
++      "parent": "isa-device"
++    },
++    {
++      "name": "spapr-nvram",
++      "parent": "vio-spapr-device"
++    },
++    {
++      "name": "chardev-msmouse",
++      "parent": "chardev"
++    },
++    {
++      "name": "hda-output",
++      "parent": "hda-audio"
++    },
++    {
++      "name": "cryptodev-backend-builtin",
++      "parent": "cryptodev-backend"
++    },
++    {
++      "name": "mpc8347eat-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "750fx_v2.2-powerpc64-cpu",
++      "parent": "750fx-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc5200b_v20-powerpc64-cpu",
++      "parent": "G2LE-family-powerpc64-cpu"
++    },
++    {
++      "name": "603e_v1.2-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "stb25-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "mptsas1068",
++      "parent": "pci-device"
++    },
++    {
++      "name": "raven",
++      "parent": "pci-device"
++    },
++    {
++      "name": "VGA",
++      "parent": "pci-vga"
++    },
++    {
++      "name": "405gpr-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8349a-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "vfio-pci-nohotplug",
++      "parent": "vfio-pci"
++    },
++    {
++      "name": "mpc8533_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "401f2-powerpc64-cpu",
++      "parent": "401x2-family-powerpc64-cpu"
++    },
++    {
++      "name": "i8257",
++      "parent": "isa-device"
++    },
++    {
++      "name": "440-xilinx-powerpc64-cpu",
++      "parent": "440x5-family-powerpc64-cpu"
++    },
++    {
++      "name": "power8e_v2.1-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "pc87312",
++      "parent": "isa-superio"
++    },
++    {
++      "name": "qio-net-listener",
++      "parent": "object"
++    },
++    {
++      "name": "mpc8560_v20-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "edu",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtio-mouse-pci",
++      "parent": "virtio-input-hid-pci"
++    },
++    {
++      "name": "740_v2.0-powerpc64-cpu",
++      "parent": "740-family-powerpc64-cpu"
++    },
++    {
++      "name": "7455_v3.2-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "power8nvl_v1.0-powernv-cpu-core",
++      "parent": "powernv-cpu-core"
++    },
++    {
++      "name": "g2legp-powerpc64-cpu",
++      "parent": "G2LE-family-powerpc64-cpu"
++    },
++    {
++      "name": "vfio-pci-igd-lpc-bridge",
++      "parent": "pci-device"
++    },
++    {
++      "name": "spapr-vlan",
++      "parent": "vio-spapr-device"
++    },
++    {
++      "name": "603e_v4-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "HDA",
++      "parent": "bus"
++    },
++    {
++      "name": "chardev-ringbuf",
++      "parent": "chardev"
++    },
++    {
++      "name": "603e_v2.2-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "qio-channel-command",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "7447_v1.1-powerpc64-cpu",
++      "parent": "7445-family-powerpc64-cpu"
++    },
++    {
++      "name": "pseries-2.8-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "pcm3680_pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "floppy",
++      "parent": "device"
++    },
++    {
++      "name": "mioe3680_pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "qemu:memory-region",
++      "parent": "object"
++    },
++    {
++      "name": "macio-oldworld",
++      "parent": "macio"
++    },
++    {
++      "name": "adb-keyboard",
++      "parent": "adb-device"
++    },
++    {
++      "name": "ppc460ex-pcie-host",
++      "parent": "pcie-host-bridge"
++    },
++    {
++      "name": "i2c-ddc",
++      "parent": "i2c-slave"
++    },
++    {
++      "name": "pseries-2.7-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "sysbus-ohci",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "7445_v1.0-powerpc64-cpu",
++      "parent": "7445-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8379-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "755_v2.4-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "7450_v1.1-powerpc64-cpu",
++      "parent": "7450-family-powerpc64-cpu"
++    },
++    {
++      "name": "can-bus",
++      "parent": "object"
++    },
++    {
++      "name": "e600-powerpc64-cpu",
++      "parent": "e600-family-powerpc64-cpu"
++    },
++    {
++      "name": "405ez-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "x2vp20-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "pseries-2.6-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "qtest-accel",
++      "parent": "accel"
++    },
++    {
++      "name": "mpc8548e_v21-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "stb04-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "750l_v2.0-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "750fl-powerpc64-cpu",
++      "parent": "750fx-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8543e_v20-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "usb-serial",
++      "parent": "usb-serial-dev"
++    },
++    {
++      "name": "cirrus-vga",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtio-blk-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "virtio-gpu-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "mpc8541_v10-powerpc64-cpu",
++      "parent": "e500v1-family-powerpc64-cpu"
++    },
++    {
++      "name": "750gx_v1.0-powerpc64-cpu",
++      "parent": "750gx-family-powerpc64-cpu"
++    },
++    {
++      "name": "cryptodev-vhost-user",
++      "parent": "cryptodev-backend"
++    },
++    {
++      "name": "mpc8555_v11-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "vt82c686b-usb-uhci",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "lsi53c810",
++      "parent": "lsi53c895a"
++    },
++    {
++      "name": "603e7t-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "uni-north-agp-pcihost",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "603-powerpc64-cpu",
++      "parent": "603-family-powerpc64-cpu"
++    },
++    {
++      "name": "System",
++      "parent": "bus"
++    },
++    {
++      "name": "405gpd-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "7400_v2.9-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "g2-powerpc64-cpu",
++      "parent": "G2-family-powerpc64-cpu"
++    },
++    {
++      "name": "750cxe_v3.1b-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "7450_v2.1-powerpc64-cpu",
++      "parent": "7450-family-powerpc64-cpu"
++    },
++    {
++      "name": "chardev-braille",
++      "parent": "chardev"
++    },
++    {
++      "name": "chardev-file",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "7448_v2.0-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc5200_v12-powerpc64-cpu",
++      "parent": "G2LE-family-powerpc64-cpu"
++    },
++    {
++      "name": "mac99-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "e300c4-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8377e-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "750l_v3.0-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "PCIE",
++      "parent": "PCI"
++    },
++    {
++      "name": "g2h4-powerpc64-cpu",
++      "parent": "G2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8610-powerpc64-cpu",
++      "parent": "e600-family-powerpc64-cpu"
++    },
++    {
++      "name": "qio-dns-resolver",
++      "parent": "object"
++    },
++    {
++      "name": "750cx_v2.1-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "vhost-user-blk-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "cuda",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "virtio-serial-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "604e_v1.0-powerpc64-cpu",
++      "parent": "604E-family-powerpc64-cpu"
++    },
++    {
++      "name": "secondary-vga",
++      "parent": "pci-vga"
++    },
++    {
++      "name": "vhost-scsi",
++      "parent": "vhost-scsi-common"
++    },
++    {
++      "name": "g2legp3-powerpc64-cpu",
++      "parent": "G2LE-family-powerpc64-cpu"
++    },
++    {
++      "name": "e500-ccsr",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "601_v2-powerpc64-cpu",
++      "parent": "601v-family-powerpc64-cpu"
++    },
++    {
++      "name": "usb-hub",
++      "parent": "usb-device"
++    },
++    {
++      "name": "ccid-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "pci-ohci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "cfi.pflash02",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "cfi.pflash01",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "pseries-2.9-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "exynos4210-ehci-usb",
++      "parent": "sysbus-ehci-usb"
++    },
++    {
++      "name": "750fx_v2.3-powerpc64-cpu",
++      "parent": "750fx-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc5200b_v21-powerpc64-cpu",
++      "parent": "G2LE-family-powerpc64-cpu"
++    },
++    {
++      "name": "power8_v2.0-pnv-chip",
++      "parent": "pnv8-chip"
++    },
++    {
++      "name": "input-linux",
++      "parent": "object"
++    },
++    {
++      "name": "mpc8533_v11-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8347ap-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "x2vp4-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "7410_v1.2-powerpc64-cpu",
++      "parent": "7410-family-powerpc64-cpu"
++    },
++    {
++      "name": "7400_v1.0-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "745_v2.2-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "740_v2.1-powerpc64-cpu",
++      "parent": "740-family-powerpc64-cpu"
++    },
++    {
++      "name": "401e2-powerpc64-cpu",
++      "parent": "401x2-family-powerpc64-cpu"
++    },
++    {
++      "name": "7448_v1.0-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8544_v11-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "xlnx.xps-uartlite",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "e5500-powerpc64-cpu",
++      "parent": "e5500-family-powerpc64-cpu"
++    },
++    {
++      "name": "pci-serial",
++      "parent": "pci-device"
++    },
++    {
++      "name": "mpc8560_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "vhost-user-scsi-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "ipmi-bmc-extern",
++      "parent": "ipmi-bmc"
++    },
++    {
++      "name": "745_v2.7-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "i8042",
++      "parent": "isa-device"
++    },
++    {
++      "name": "750cxe_v2.3-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "i82559c",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82559b",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82559a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "macio-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "SCSI",
++      "parent": "bus"
++    },
++    {
++      "name": "rocker",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pcnet",
++      "parent": "pci-device"
++    },
++    {
++      "name": "rng-egd",
++      "parent": "rng-backend"
++    },
++    {
++      "name": "spapr-tce-table",
++      "parent": "device"
++    },
++    {
++      "name": "7400_v2.0-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "405cra-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "sm501",
++      "parent": "pci-device"
++    },
++    {
++      "name": "chardev-testdev",
++      "parent": "chardev"
++    },
++    {
++      "name": "e200z5-powerpc64-cpu",
++      "parent": "e200-family-powerpc64-cpu"
++    },
++    {
++      "name": "740_v3.1-powerpc64-cpu",
++      "parent": "740-family-powerpc64-cpu"
++    },
++    {
++      "name": "migration",
++      "parent": "device"
++    },
++    {
++      "name": "usb-storage",
++      "parent": "usb-storage-dev"
++    },
++    {
++      "name": "filter-dump",
++      "parent": "netfilter"
++    },
++    {
++      "name": "i82558b",
++      "parent": "pci-device"
++    },
++    {
++      "name": "power8_v2.0-powerpc64-cpu",
++      "parent": "POWER8-family-powerpc64-cpu"
++    },
++    {
++      "name": "tls-creds-x509",
++      "parent": "tls-creds"
++    },
++    {
++      "name": "401d2-powerpc64-cpu",
++      "parent": "401x2-family-powerpc64-cpu"
++    },
++    {
++      "name": "i82558a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "smbus-eeprom",
++      "parent": "smbus-device"
++    },
++    {
++      "name": "mpc8543_v20-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8548e_v11-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8347eap-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8543e_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "host-powerpc64-cpu",
++      "parent": "power9_v2.0-powerpc64-cpu"
++    },
++    {
++      "name": "i82801",
++      "parent": "pci-device"
++    },
++    {
++      "name": "chardev-mux",
++      "parent": "chardev"
++    },
++    {
++      "name": "virtio-net-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "virtio-keyboard-device",
++      "parent": "virtio-input-hid-device"
++    },
++    {
++      "name": "i82562",
++      "parent": "pci-device"
++    },
++    {
++      "name": "usb-net",
++      "parent": "usb-device"
++    },
++    {
++      "name": "throttle-group",
++      "parent": "object"
++    },
++    {
++      "name": "chardev-memory",
++      "parent": "chardev-ringbuf"
++    },
++    {
++      "name": "power9_v2.0-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "603e_v1.3-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "755_v1.0-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "i82557c",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82557b",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82557a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "mpc8347t-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "can-host-socketcan",
++      "parent": "can-host"
++    },
++    {
++      "name": "sdhci-bus",
++      "parent": "sd-bus"
++    },
++    {
++      "name": "uni-north",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "isa-i8259",
++      "parent": "pic-common"
++    },
++    {
++      "name": "virtio-gpu-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "mpc8548_v20-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "power8nvl_v1.0-pnv-chip",
++      "parent": "pnv8-chip"
++    },
++    {
++      "name": "mpc8343-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8560_v21-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "split-irq",
++      "parent": "device"
++    },
++    {
++      "name": "usb-mouse",
++      "parent": "usb-hid"
++    },
++    {
++      "name": "i82551",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82550",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pseries-2.12-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "macio-gpio",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "405d2-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "piix3-usb-uhci",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "mpc8540_v20-powerpc64-cpu",
++      "parent": "e500v1-family-powerpc64-cpu"
++    },
++    {
++      "name": "7455_v3.3-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "nec-usb-xhci",
++      "parent": "base-xhci"
++    },
++    {
++      "name": "e500v2_v30-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "pseries-2.11-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "power9_v2.0-pnv-chip",
++      "parent": "pnv9-chip"
++    },
++    {
++      "name": "host-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "macio-ide",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "virtio-crypto-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "755_v2.0-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "filter-mirror",
++      "parent": "netfilter"
++    },
++    {
++      "name": "ich9-usb-ehci2",
++      "parent": "pci-ehci-usb"
++    },
++    {
++      "name": "ich9-usb-ehci1",
++      "parent": "pci-ehci-usb"
++    },
++    {
++      "name": "vfio-pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "prep-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "pvscsi",
++      "parent": "pci-device"
++    },
++    {
++      "name": "irq",
++      "parent": "object"
++    },
++    {
++      "name": "pseries-2.10-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "apple-desktop-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "memory-backend-memfd",
++      "parent": "memory-backend"
++    },
++    {
++      "name": "isa-ide",
++      "parent": "isa-device"
++    },
++    {
++      "name": "745_v2.3-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "7410_v1.3-powerpc64-cpu",
++      "parent": "7410-family-powerpc64-cpu"
++    },
++    {
++      "name": "755_v2.5-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "7450_v1.2-powerpc64-cpu",
++      "parent": "7450-family-powerpc64-cpu"
++    },
++    {
++      "name": "7457_v1.0-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "pnv9-chip",
++      "parent": "pnv-chip"
++    },
++    {
++      "name": "ich9-ahci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "750l_v2.1-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "qio-channel-socket",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "mpc8543e_v21-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "sd-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "virtserialport",
++      "parent": "virtio-serial-port"
++    },
++    {
++      "name": "mpc8641d-powerpc64-cpu",
++      "parent": "e600-family-powerpc64-cpu"
++    },
++    {
++      "name": "pseries-3.0-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "750cxe_v2.4-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "i82378",
++      "parent": "pci-device"
++    },
++    {
++      "name": "chardev-stdio",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "750gx_v1.1-powerpc64-cpu",
++      "parent": "750gx-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8541_v11-powerpc64-cpu",
++      "parent": "e500v1-family-powerpc64-cpu"
++    },
++    {
++      "name": "gus",
++      "parent": "isa-device"
++    },
++    {
++      "name": "e500_v20-powerpc64-cpu",
++      "parent": "e500v1-family-powerpc64-cpu"
++    },
++    {
++      "name": "cobra-powerpc64-cpu",
++      "parent": "401-family-powerpc64-cpu"
++    },
++    {
++      "name": "pnv-lpc",
++      "parent": "device"
++    },
++    {
++      "name": "i82374",
++      "parent": "isa-device"
++    },
++    {
++      "name": "7445_v2.1-powerpc64-cpu",
++      "parent": "7445-family-powerpc64-cpu"
++    },
++    {
++      "name": "pc-dimm",
++      "parent": "device"
++    },
++    {
++      "name": "440-xilinx-w-dfpu-powerpc64-cpu",
++      "parent": "440x5wDFPU-family-powerpc64-cpu"
++    },
++    {
++      "name": "7400_v2.1-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "604-powerpc64-cpu",
++      "parent": "604-family-powerpc64-cpu"
++    },
++    {
++      "name": "g3beige-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "405crb-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "fusbh200-ehci-usb",
++      "parent": "sysbus-ehci-usb"
++    },
++    {
++      "name": "IndustryPack",
++      "parent": "bus"
++    },
++    {
++      "name": "7441_v2.3-powerpc64-cpu",
++      "parent": "7440-family-powerpc64-cpu"
++    },
++    {
++      "name": "7448_v2.1-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "603e7-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "virtio-rng-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "cryptodev-backend",
++      "parent": "object"
++    },
++    {
++      "name": "adb-mouse",
++      "parent": "adb-device"
++    },
++    {
++      "name": "or-irq",
++      "parent": "device"
++    },
++    {
++      "name": "mpc8543_v21-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "750cx_v2.2-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "ipmi-bmc-sim",
++      "parent": "ipmi-bmc"
++    },
++    {
++      "name": "usb-ehci",
++      "parent": "pci-ehci-usb"
++    },
++    {
++      "name": "chardev-serial",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "7451_v2.10-powerpc64-cpu",
++      "parent": "7450-family-powerpc64-cpu"
++    },
++    {
++      "name": "401c2-powerpc64-cpu",
++      "parent": "401x2-family-powerpc64-cpu"
++    },
++    {
++      "name": "chardev-vc",
++      "parent": "chardev"
++    },
++    {
++      "name": "bamboo-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "mpc8543_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "filter-replay",
++      "parent": "netfilter"
++    },
++    {
++      "name": "603e_v1.4-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "970mp_v1.1-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "pseries-2.12-sxxm-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "dec-21154-sysbus",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "chardev-wctablet",
++      "parent": "chardev"
++    },
++    {
++      "name": "e1000-82545em",
++      "parent": "e1000-base"
++    },
++    {
++      "name": "spapr-vty",
++      "parent": "vio-spapr-device"
++    },
++    {
++      "name": "power9_v1.0-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "7441_v2.10-powerpc64-cpu",
++      "parent": "7440-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8347et-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "virtio-9p-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "7400_v1.1-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "e1000-82544gc",
++      "parent": "e1000-base"
++    },
++    {
++      "name": "filter-buffer",
++      "parent": "netfilter"
++    },
++    {
++      "name": "7448_v1.1-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "740_v2.2-powerpc64-cpu",
++      "parent": "740-family-powerpc64-cpu"
++    },
++    {
++      "name": "7455_v3.4-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "pseries-3.1-machine",
++      "parent": "spapr-machine"
++    },
++    {
++      "name": "mpc8548_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8545_v20-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8343ea-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "npe405l-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "imx-usdhc",
++      "parent": "generic-sdhci"
++    },
++    {
++      "name": "prep-systemio",
++      "parent": "isa-device"
++    },
++    {
++      "name": "e500-spin",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "745_v2.8-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "755_v2.1-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "mos6522-pmu",
++      "parent": "mos6522"
++    },
++    {
++      "name": "mpc8544ds-machine",
++      "parent": "ppce500-base-machine"
++    },
++    {
++      "name": "mpc8540_v10-powerpc64-cpu",
++      "parent": "e500v1-family-powerpc64-cpu"
++    },
++    {
++      "name": "pci-serial-4x",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ich9-intel-hda",
++      "parent": "intel-hda-generic"
++    },
++    {
++      "name": "virtio-9p-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "power8nvl_v1.0-powerpc64-cpu",
++      "parent": "POWER8-family-powerpc64-cpu"
++    },
++    {
++      "name": "ivshmem",
++      "parent": "ivshmem-common"
++    },
++    {
++      "name": "e500v2_v20-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "virtio-scsi-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "qemu-console",
++      "parent": "object"
++    },
++    {
++      "name": "mpc8349ea-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "7457a_v1.0-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "piix4-usb-uhci",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "mpc8547e_v20-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "e200z6-powerpc64-cpu",
++      "parent": "e200-family-powerpc64-cpu"
++    },
++    {
++      "name": "isa-ipmi-bt",
++      "parent": "isa-device"
++    },
++    {
++      "name": "ppce500-machine",
++      "parent": "ppce500-base-machine"
++    },
++    {
++      "name": "virtio-pci-bus",
++      "parent": "virtio-bus"
++    },
++    {
++      "name": "750l_v2.2-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "pci-testdev",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ipoctal232",
++      "parent": "ipack-device"
++    },
++    {
++      "name": "uni-north-pci-pcihost",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "spapr-drc-lmb",
++      "parent": "spapr-drc-logical"
++    },
++    {
++      "name": "440epx-powerpc64-cpu",
++      "parent": "440EP-family-powerpc64-cpu"
++    },
++    {
++      "name": "405gpa-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "7400_v2.6-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "m41t80",
++      "parent": "i2c-slave"
++    },
++    {
++      "name": "virtio-tablet-device",
++      "parent": "virtio-input-hid-device"
++    },
++    {
++      "name": "powernv-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "ISA",
++      "parent": "bus"
++    },
++    {
++      "name": "750_v3.0-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "ES1370",
++      "parent": "pci-device"
++    },
++    {
++      "name": "mpc8543e_v11-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "603e7v-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "power7_v2.3-powerpc64-cpu",
++      "parent": "POWER7-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8544-guts",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "power9_v2.0-powerpc64-cpu",
++      "parent": "POWER9-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8555e_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8347p-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "openpic",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "mpc8541e_v10-powerpc64-cpu",
++      "parent": "e500v1-family-powerpc64-cpu"
++    },
++    {
++      "name": "750cxe_v3.0-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "e500_v10-powerpc64-cpu",
++      "parent": "e500v1-family-powerpc64-cpu"
++    },
++    {
++      "name": "power8_v2.0-powernv-cpu-core",
++      "parent": "powernv-cpu-core"
++    },
++    {
++      "name": "755_v1.1-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "tcg-accel",
++      "parent": "accel"
++    },
++    {
++      "name": "virtconsole",
++      "parent": "virtserialport"
++    },
++    {
++      "name": "750_v1.0-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "750l_v3.2-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "virtio-tablet-pci",
++      "parent": "virtio-input-hid-pci"
++    },
++    {
++      "name": "pci-serial-2x",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ne2k_isa",
++      "parent": "isa-device"
++    },
++    {
++      "name": "isa-fdc",
++      "parent": "isa-device"
++    },
++    {
++      "name": "esp",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "mpc8548_v21-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "usb-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "colo-compare",
++      "parent": "object"
++    },
++    {
++      "name": "ne2k_pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "spapr-drc-pci",
++      "parent": "spapr-drc-physical"
++    },
++    {
++      "name": "745_v2.4-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "sii3112",
++      "parent": "pci-ide"
++    },
++    {
++      "name": "403gcx-powerpc64-cpu",
++      "parent": "403GCX-family-powerpc64-cpu"
++    },
++    {
++      "name": "power8e_v2.1-pnv-chip",
++      "parent": "pnv8-chip"
++    },
++    {
++      "name": "e1000e",
++      "parent": "pci-device"
++    },
++    {
++      "name": "mpc8543_v11-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8540_v21-powerpc64-cpu",
++      "parent": "e500v1-family-powerpc64-cpu"
++    },
++    {
++      "name": "7445_v3.2-powerpc64-cpu",
++      "parent": "7445-family-powerpc64-cpu"
++    },
++    {
++      "name": "rs6000-mc",
++      "parent": "isa-device"
++    },
++    {
++      "name": "mpc8347ep-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8349-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "PCI",
++      "parent": "bus"
++    },
++    {
++      "name": "kvm-openpic",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "isabus-bridge",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "401b2-powerpc64-cpu",
++      "parent": "401x2-family-powerpc64-cpu"
++    },
++    {
++      "name": "vhost-user-scsi",
++      "parent": "vhost-scsi-common"
++    },
++    {
++      "name": "tpm-emulator",
++      "parent": "tpm-backend"
++    },
++    {
++      "name": "virtex-ml507-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "usb-kbd",
++      "parent": "usb-hid"
++    },
++    {
++      "name": "750_v2.0-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "e500-host-bridge",
++      "parent": "pci-device"
++    },
++    {
++      "name": "vhost-user-blk",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "7410_v1.4-powerpc64-cpu",
++      "parent": "7410-family-powerpc64-cpu"
++    },
++    {
++      "name": "g2ls-powerpc64-cpu",
++      "parent": "G2-family-powerpc64-cpu"
++    },
++    {
++      "name": "npe405h-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "power9_v1.0-powerpc64-cpu",
++      "parent": "POWER9-family-powerpc64-cpu"
++    },
++    {
++      "name": "970mp_v1.0-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "401a1-powerpc64-cpu",
++      "parent": "401-family-powerpc64-cpu"
++    },
++    {
++      "name": "ivshmem-plain",
++      "parent": "ivshmem-common"
++    },
++    {
++      "name": "755_v2.6-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "604e_v2.2-powerpc64-cpu",
++      "parent": "604E-family-powerpc64-cpu"
++    },
++    {
++      "name": "970fx_v3.0-powerpc64-cpu",
++      "parent": "970-family-powerpc64-cpu"
++    },
++    {
++      "name": "7457_v1.1-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "pnv-occ",
++      "parent": "device"
++    },
++    {
++      "name": "spapr-vio-bridge",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "secret",
++      "parent": "object"
++    },
++    {
++      "name": "hda-duplex",
++      "parent": "hda-audio"
++    },
++    {
++      "name": "ppc4xx-ehci-usb",
++      "parent": "sysbus-ehci-usb"
++    },
++    {
++      "name": "u3-agp-pcihost",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "qio-channel-buffer",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "none-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "raven-pcihost",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "virtio-balloon-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "sysbus-fdc",
++      "parent": "base-sysbus-fdc"
++    },
++    {
++      "name": "750fx_v1.0-powerpc64-cpu",
++      "parent": "750fx-family-powerpc64-cpu"
++    },
++    {
++      "name": "750gx_v1.2-powerpc64-cpu",
++      "parent": "750gx-family-powerpc64-cpu"
++    },
++    {
++      "name": "megasas-gen2",
++      "parent": "megasas-base"
++    },
++    {
++      "name": "nvme",
++      "parent": "pci-device"
++    },
++    {
++      "name": "usb-tablet",
++      "parent": "usb-hid"
++    },
++    {
++      "name": "970fx_v1.0-powerpc64-cpu",
++      "parent": "970-family-powerpc64-cpu"
++    },
++    {
++      "name": "e500v2_v21-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8572e-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "e300c1-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "7400_v2.2-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "7447a_v1.0-powerpc64-cpu",
++      "parent": "7445-family-powerpc64-cpu"
++    },
++    {
++      "name": "403ga-powerpc64-cpu",
++      "parent": "403-family-powerpc64-cpu"
++    },
++    {
++      "name": "405crc-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "usb-wacom-tablet",
++      "parent": "usb-device"
++    },
++    {
++      "name": "740e-powerpc64-cpu",
++      "parent": "740-family-powerpc64-cpu"
++    },
++    {
++      "name": "usb-braille",
++      "parent": "usb-serial-dev"
++    },
++    {
++      "name": "scsi-disk",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "intel-hda",
++      "parent": "intel-hda-generic"
++    },
++    {
++      "name": "970mp_v1.0-powerpc64-cpu",
++      "parent": "970-family-powerpc64-cpu"
++    },
++    {
++      "name": "603e7v1-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "e500mc-powerpc64-cpu",
++      "parent": "e500mc-family-powerpc64-cpu"
++    },
++    {
++      "name": "e500v2_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8544e_v10-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "kvm-accel",
++      "parent": "accel"
++    },
++    {
++      "name": "power8nvl_v1.0-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "7400_v2.7-powerpc64-cpu",
++      "parent": "7400-family-powerpc64-cpu"
++    },
++    {
++      "name": "virtio-scsi-device",
++      "parent": "virtio-scsi-common"
++    },
++    {
++      "name": "405gpb-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "603p-powerpc64-cpu",
++      "parent": "603E-family-powerpc64-cpu"
++    },
++    {
++      "name": "grackle",
++      "parent": "pci-device"
++    },
++    {
++      "name": "970_v2.2-spapr-cpu-core",
++      "parent": "spapr-cpu-core"
++    },
++    {
++      "name": "AC97",
++      "parent": "pci-device"
++    },
++    {
++      "name": "750fx_v2.0-powerpc64-cpu",
++      "parent": "750fx-family-powerpc64-cpu"
++    },
++    {
++      "name": "power9_v2.0-powernv-cpu-core",
++      "parent": "powernv-cpu-core"
++    },
++    {
++      "name": "970fx_v2.0-powerpc64-cpu",
++      "parent": "970-family-powerpc64-cpu"
++    },
++    {
++      "name": "i2c-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "virtio-mouse-device",
++      "parent": "virtio-input-hid-device"
++    },
++    {
++      "name": "mos6522-cuda",
++      "parent": "mos6522"
++    },
++    {
++      "name": "mpc8572-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "750e-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "g2hip3-powerpc64-cpu",
++      "parent": "G2-family-powerpc64-cpu"
++    },
++    {
++      "name": "g2le-powerpc64-cpu",
++      "parent": "G2LE-family-powerpc64-cpu"
++    },
++    {
++      "name": "macio-nvram",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "isa-pit",
++      "parent": "pit-common"
++    },
++    {
++      "name": "i6300esb",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ide-drive",
++      "parent": "ide-device"
++    },
++    {
++      "name": "sam460ex-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "generic-sdhci",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "pvrdma",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ref405ep-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "grackle-pcihost",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "vfio-platform",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "405d4-powerpc64-cpu",
++      "parent": "405-family-powerpc64-cpu"
++    },
++    {
++      "name": "sungem",
++      "parent": "pci-device"
++    },
++    {
++      "name": "mpc8548_v11-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8545_v21-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "sd-card",
++      "parent": "device"
++    },
++    {
++      "name": "7455_v1.0-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8377-powerpc64-cpu",
++      "parent": "e300-family-powerpc64-cpu"
++    },
++    {
++      "name": "745_v2.0-powerpc64-cpu",
++      "parent": "745-family-powerpc64-cpu"
++    },
++    {
++      "name": "755_v2.2-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "e500-pcihost",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "kvaser_pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "750_v2.1-powerpc64-cpu",
++      "parent": "750-family-powerpc64-cpu"
++    },
++    {
++      "name": "power8e_v2.1-powernv-cpu-core",
++      "parent": "powernv-cpu-core"
++    },
++    {
++      "name": "uni-north-internal-pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "spapr-rtc",
++      "parent": "device"
++    },
++    {
++      "name": "755_v2.7-powerpc64-cpu",
++      "parent": "755-family-powerpc64-cpu"
++    },
++    {
++      "name": "750cxe_v2.1-powerpc64-cpu",
++      "parent": "750cx-family-powerpc64-cpu"
++    },
++    {
++      "name": "rng-random",
++      "parent": "rng-backend"
++    },
++    {
++      "name": "g2gp-powerpc64-cpu",
++      "parent": "G2-family-powerpc64-cpu"
++    },
++    {
++      "name": "7457a_v1.1-powerpc64-cpu",
++      "parent": "7455-family-powerpc64-cpu"
++    },
++    {
++      "name": "750cl_v1.0-powerpc64-cpu",
++      "parent": "750cl-family-powerpc64-cpu"
++    },
++    {
++      "name": "mpc8547e_v21-powerpc64-cpu",
++      "parent": "e500v2-family-powerpc64-cpu"
++    },
++    {
++      "name": "virtio-keyboard-pci",
++      "parent": "virtio-input-hid-pci"
++    }
++  ],
++  "id": "libvirt-9"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-blk-pci"
++  },
++  "id": "libvirt-10"
++}
++
++{
++  "return": [
++    {
++      "name": "iothread",
++      "type": "link<iothread>"
++    },
++    {
++      "name": "request-merging",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "secs",
++      "type": "uint32"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "heads",
++      "type": "uint32"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "scsi",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "cyls",
++      "type": "uint32"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "queue-size",
++      "type": "uint16"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "config-wce",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "class",
++      "type": "uint32"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-blk-device>"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "num-queues",
++      "type": "uint16"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-10"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-net-pci"
++  },
++  "id": "libvirt-11"
++}
++
++{
++  "return": [
++    {
++      "name": "ctrl_mac_addr",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "status",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_csum",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "speed",
++      "type": "int32"
++    },
++    {
++      "name": "ctrl_rx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ctrl_vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "mrg_rxbuf",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_tso6",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-txtimer",
++      "type": "uint32"
++    },
++    {
++      "name": "host_tso4",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "ctrl_rx_extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "gso",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "x-txburst",
++      "type": "int32"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_mtu",
++      "type": "uint16"
++    },
++    {
++      "name": "ctrl_vlan",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_tso4",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-net-device>"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_announce",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_ecn",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_ufo",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "duplex",
++      "type": "str"
++    },
++    {
++      "name": "guest_tso6",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ctrl_guest_offloads",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "csum",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "mq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_ecn",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_ufo",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "mac",
++      "description": "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
++      "type": "str"
++    },
++    {
++      "name": "tx_queue_size",
++      "type": "uint16"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "tx",
++      "type": "str"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-mtu-bypass-backend",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "netdev",
++      "description": "ID of a netdev to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rx_queue_size",
++      "type": "uint16"
++    }
++  ],
++  "id": "libvirt-11"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-scsi-pci"
++  },
++  "id": "libvirt-12"
++}
++
++{
++  "return": [
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "virtqueue_size",
++      "type": "uint32"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "num_queues",
++      "type": "uint32"
++    },
++    {
++      "name": "cmd_per_lun",
++      "type": "uint32"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "hotplug",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "max_sectors",
++      "type": "uint32"
++    },
++    {
++      "name": "param_change",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iothread",
++      "type": "link<iothread>"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-scsi-device>"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-12"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-net-ccw"
++  },
++  "id": "libvirt-13"
++}
++
++{
++  "id": "libvirt-13",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-net-ccw' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-scsi-ccw"
++  },
++  "id": "libvirt-14"
++}
++
++{
++  "id": "libvirt-14",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-scsi-ccw' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-net-s390"
++  },
++  "id": "libvirt-15"
++}
++
++{
++  "id": "libvirt-15",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-net-s390' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "pci-assign"
++  },
++  "id": "libvirt-16"
++}
++
++{
++  "id": "libvirt-16",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'pci-assign' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "kvm-pci-assign"
++  },
++  "id": "libvirt-17"
++}
++
++{
++  "id": "libvirt-17",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'kvm-pci-assign' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "vfio-pci"
++  },
++  "id": "libvirt-18"
++}
++
++{
++  "return": [
++    {
++      "name": "x-igd-opregion",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pci-vendor-id",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pci-sub-device-id",
++      "type": "uint32"
++    },
++    {
++      "name": "x-no-kvm-ioeventfd",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-req",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-no-kvm-msi",
++      "type": "bool"
++    },
++    {
++      "name": "x-no-vfio-ioeventfd",
++      "type": "bool"
++    },
++    {
++      "name": "x-no-kvm-intx",
++      "type": "bool"
++    },
++    {
++      "name": "host",
++      "description": "Address (bus/device/function) of the host device, example: 04:10.0",
++      "type": "str"
++    },
++    {
++      "name": "x-no-kvm-msix",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-balloon-allowed",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pci-sub-vendor-id",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pci-device-id",
++      "type": "uint32"
++    },
++    {
++      "name": "x-no-geforce-quirks",
++      "type": "bool"
++    },
++    {
++      "name": "display",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "x-nv-gpudirect-clique",
++      "description": "NVIDIA GPUDirect Clique ID (0 - 15)",
++      "type": "uint4"
++    },
++    {
++      "name": "x-igd-gms",
++      "type": "uint32"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "x-msix-relocation",
++      "description": "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
++      "type": "OffAutoPCIBAR"
++    },
++    {
++      "name": "x-intx-mmap-timeout-ms",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-no-mmap",
++      "type": "bool"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "sysfsdev",
++      "type": "str"
++    },
++    {
++      "name": "x-vga",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-18"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "scsi-disk"
++  },
++  "id": "libvirt-19"
++}
++
++{
++  "return": [
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "port_index",
++      "type": "uint16"
++    },
++    {
++      "name": "dpofua",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "lun",
++      "type": "uint32"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "scsi_version",
++      "type": "int32"
++    },
++    {
++      "name": "max_unmap_size",
++      "type": "uint64"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "port_wwn",
++      "type": "uint64"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "product",
++      "type": "str"
++    },
++    {
++      "name": "scsi-id",
++      "type": "uint32"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "vendor",
++      "type": "str"
++    },
++    {
++      "name": "channel",
++      "type": "uint32"
++    },
++    {
++      "name": "wwn",
++      "type": "uint64"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "removable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "ver",
++      "type": "str"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "max_io_size",
++      "type": "uint64"
++    }
++  ],
++  "id": "libvirt-19"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "ide-drive"
++  },
++  "id": "libvirt-20"
++}
++
++{
++  "return": [
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "unit",
++      "type": "uint32"
++    },
++    {
++      "name": "wwn",
++      "type": "uint64"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "model",
++      "type": "str"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "ver",
++      "type": "str"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    }
++  ],
++  "id": "libvirt-20"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "PIIX4_PM"
++  },
++  "id": "libvirt-21"
++}
++
++{
++  "id": "libvirt-21",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'PIIX4_PM' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "usb-host"
++  },
++  "id": "libvirt-22"
++}
++
++{
++  "return": [
++    {
++      "name": "isobufs",
++      "type": "uint32"
++    },
++    {
++      "name": "hostaddr",
++      "type": "uint32"
++    },
++    {
++      "name": "msos-desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "productid",
++      "type": "uint32"
++    },
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "isobsize",
++      "type": "uint32"
++    },
++    {
++      "name": "port",
++      "type": "str"
++    },
++    {
++      "name": "vendorid",
++      "type": "uint32"
++    },
++    {
++      "name": "pipeline",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "attached",
++      "type": "bool"
++    },
++    {
++      "name": "hostport",
++      "type": "str"
++    },
++    {
++      "name": "full-path",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "loglevel",
++      "type": "uint32"
++    },
++    {
++      "name": "hostbus",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-22"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "scsi-generic"
++  },
++  "id": "libvirt-23"
++}
++
++{
++  "return": [
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "lun",
++      "type": "uint32"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "channel",
++      "type": "uint32"
++    },
++    {
++      "name": "scsi-id",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-23"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "i440FX-pcihost"
++  },
++  "id": "libvirt-24"
++}
++
++{
++  "id": "libvirt-24",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'i440FX-pcihost' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "q35-pcihost"
++  },
++  "id": "libvirt-25"
++}
++
++{
++  "id": "libvirt-25",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'q35-pcihost' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "usb-storage"
++  },
++  "id": "libvirt-26"
++}
++
++{
++  "return": [
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "msos-desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "port",
++      "type": "str"
++    },
++    {
++      "name": "attached",
++      "type": "bool"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "full-path",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "removable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    }
++  ],
++  "id": "libvirt-26"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "kvm-pit"
++  },
++  "id": "libvirt-27"
++}
++
++{
++  "id": "libvirt-27",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'kvm-pit' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "VGA"
++  },
++  "id": "libvirt-28"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "mmio",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "qemu-extended-regs",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "big-endian-framebuffer",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "yres",
++      "type": "uint32"
++    },
++    {
++      "name": "vgamem_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "global-vmstate",
++      "type": "bool"
++    },
++    {
++      "name": "edid",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "xres",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-28"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-gpu-pci"
++  },
++  "id": "libvirt-29"
++}
++
++{
++  "return": [
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "yres",
++      "type": "uint32"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "xres",
++      "type": "uint32"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "max_outputs",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-gpu-device>"
++    },
++    {
++      "name": "max_hostmem",
++      "type": "size"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-29"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-gpu-device"
++  },
++  "id": "libvirt-30"
++}
++
++{
++  "return": [
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "yres",
++      "type": "uint32"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "max_outputs",
++      "type": "uint32"
++    },
++    {
++      "name": "xres",
++      "type": "uint32"
++    },
++    {
++      "name": "max_hostmem",
++      "type": "size"
++    }
++  ],
++  "id": "libvirt-30"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "ICH9-LPC"
++  },
++  "id": "libvirt-31"
++}
++
++{
++  "id": "libvirt-31",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'ICH9-LPC' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-balloon-pci"
++  },
++  "id": "libvirt-32"
++}
++
++{
++  "return": [
++    {
++      "name": "guest-stats-polling-interval",
++      "type": "int"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest-stats",
++      "type": "guest statistics"
++    },
++    {
++      "name": "deflate-on-oom",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "class",
++      "type": "uint32"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-balloon-device>"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-32"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-balloon-ccw"
++  },
++  "id": "libvirt-33"
++}
++
++{
++  "id": "libvirt-33",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-balloon-ccw' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-balloon-device"
++  },
++  "id": "libvirt-34"
++}
++
++{
++  "return": [
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest-stats",
++      "type": "guest statistics"
++    },
++    {
++      "name": "guest-stats-polling-interval",
++      "type": "int"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "deflate-on-oom",
++      "description": "on/off",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-34"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "nec-usb-xhci"
++  },
++  "id": "libvirt-35"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "intrs",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "msix",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "msi",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "superspeed-ports-first",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "streams",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "force-pcie-endcap",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "p3",
++      "type": "uint32"
++    },
++    {
++      "name": "p2",
++      "type": "uint32"
++    },
++    {
++      "name": "slots",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-35"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "spapr-pci-host-bridge"
++  },
++  "id": "libvirt-36"
++}
++
++{
++  "return": [
++    {
++      "name": "dynamic-reconfiguration",
++      "type": "bool"
++    },
++    {
++      "name": "ddw",
++      "type": "bool"
++    },
++    {
++      "name": "dma_win_size",
++      "type": "uint64"
++    },
++    {
++      "name": "numa_node",
++      "type": "uint32"
++    },
++    {
++      "name": "mem64_win_size",
++      "type": "uint64"
++    },
++    {
++      "name": "pgsz",
++      "type": "uint64"
++    },
++    {
++      "name": "pre-2.8-migration",
++      "type": "bool"
++    },
++    {
++      "name": "dma_win_addr",
++      "type": "uint64"
++    },
++    {
++      "name": "io_win_size",
++      "type": "uint64"
++    },
++    {
++      "name": "mem_win_size",
++      "type": "uint64"
++    },
++    {
++      "name": "dma64_win_addr",
++      "type": "uint64"
++    },
++    {
++      "name": "pcie-extended-configuration-space",
++      "type": "bool"
++    },
++    {
++      "name": "index",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-36"
++}
++
++{
++  "execute": "qom-list-properties",
++  "arguments": {
++    "typename": "memory-backend-file"
++  },
++  "id": "libvirt-37"
++}
++
++{
++  "return": [
++    {
++      "name": "type",
++      "type": "string"
++    },
++    {
++      "name": "policy",
++      "description": "Set the NUMA policy",
++      "type": "HostMemPolicy"
++    },
++    {
++      "name": "share",
++      "description": "Mark the memory as private to QEMU or shared",
++      "type": "bool"
++    },
++    {
++      "name": "host-nodes",
++      "description": "Binds memory to the list of NUMA host nodes",
++      "type": "int"
++    },
++    {
++      "name": "prealloc",
++      "description": "Preallocate memory",
++      "type": "bool"
++    },
++    {
++      "name": "dump",
++      "description": "Set to 'off' to exclude from core dump",
++      "type": "bool"
++    },
++    {
++      "name": "size",
++      "description": "Size of the memory region (ex: 500M)",
++      "type": "int"
++    },
++    {
++      "name": "merge",
++      "description": "Mark memory as mergeable",
++      "type": "bool"
++    },
++    {
++      "name": "pmem",
++      "type": "bool"
++    },
++    {
++      "name": "align",
++      "type": "int"
++    },
++    {
++      "name": "mem-path",
++      "type": "string"
++    },
++    {
++      "name": "discard-data",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-37"
++}
++
++{
++  "execute": "qom-list-properties",
++  "arguments": {
++    "typename": "spapr-machine"
++  },
++  "id": "libvirt-38"
++}
++
++{
++  "return": [
++    {
++      "name": "type",
++      "type": "string"
++    },
++    {
++      "name": "graphics",
++      "description": "Set on/off to enable/disable graphics emulation",
++      "type": "bool"
++    },
++    {
++      "name": "phandle-start",
++      "description": "The first phandle ID we may generate dynamically",
++      "type": "int"
++    },
++    {
++      "name": "dump-guest-core",
++      "description": "Include guest memory in  a core dump",
++      "type": "bool"
++    },
++    {
++      "name": "kernel-irqchip",
++      "description": "Configure KVM in-kernel irqchip",
++      "type": "on|off|split"
++    },
++    {
++      "name": "accel",
++      "description": "Accelerator list",
++      "type": "string"
++    },
++    {
++      "name": "append",
++      "description": "Linux kernel command line",
++      "type": "string"
++    },
++    {
++      "name": "dumpdtb",
++      "description": "Dump current dtb to a file and quit",
++      "type": "string"
++    },
++    {
++      "name": "memory-encryption",
++      "description": "Set memory encryption object to use",
++      "type": "string"
++    },
++    {
++      "name": "igd-passthru",
++      "description": "Set on/off to enable/disable igd passthrou",
++      "type": "bool"
++    },
++    {
++      "name": "dt-compatible",
++      "description": "Overrides the \"compatible\" property of the dt root node",
++      "type": "string"
++    },
++    {
++      "name": "kernel",
++      "description": "Linux kernel image file",
++      "type": "string"
++    },
++    {
++      "name": "usb",
++      "description": "Set on/off to enable/disable usb",
++      "type": "bool"
++    },
++    {
++      "name": "suppress-vmdesc",
++      "description": "Set on to disable self-describing migration",
++      "type": "bool"
++    },
++    {
++      "name": "dtb",
++      "description": "Linux kernel device tree file",
++      "type": "string"
++    },
++    {
++      "name": "firmware",
++      "description": "Firmware image",
++      "type": "string"
++    },
++    {
++      "name": "mem-merge",
++      "description": "Enable/disable memory merge support",
++      "type": "bool"
++    },
++    {
++      "name": "initrd",
++      "description": "Linux initial ramdisk file",
++      "type": "string"
++    },
++    {
++      "name": "enforce-config-section",
++      "description": "Set on to enforce configuration section migration",
++      "type": "bool"
++    },
++    {
++      "name": "kvm-shadow-mem",
++      "description": "KVM shadow MMU size",
++      "type": "int"
++    },
++    {
++      "name": "cap-hpt-max-page-size",
++      "description": "Maximum page size for Hash Page Table guests",
++      "type": "int"
++    },
++    {
++      "name": "cap-dfp",
++      "description": "Allow Decimal Floating Point (DFP)",
++      "type": "bool"
++    },
++    {
++      "name": "cap-cfpc",
++      "description": "Cache Flush on Privilege Change (broken, workaround, fixed)",
++      "type": "string"
++    },
++    {
++      "name": "cap-ibs",
++      "description": "Indirect Branch Speculation (broken, fixed-ibs, fixed-ccd)",
++      "type": "string"
++    },
++    {
++      "name": "cap-sbbc",
++      "description": "Speculation Barrier Bounds Checking (broken, workaround, fixed)",
++      "type": "string"
++    },
++    {
++      "name": "cap-vsx",
++      "description": "Allow Vector Scalar Extensions (VSX)",
++      "type": "bool"
++    },
++    {
++      "name": "cap-htm",
++      "description": "Allow Hardware Transactional Memory (HTM)",
++      "type": "bool"
++    },
++    {
++      "name": "cap-nested-hv",
++      "description": "Allow Nested KVM-HV",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-38"
++}
++
++{
++  "execute": "query-machines",
++  "id": "libvirt-39"
++}
++
++{
++  "return": [
++    {
++      "hotpluggable-cpus": false,
++      "name": "ref405ep",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "sam460ex",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "none",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "virtex-ml507",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "powernv",
++      "cpu-max": 2048
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "ppce500",
++      "cpu-max": 32
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "mpc8544ds",
++      "cpu-max": 15
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pseries-3.1",
++      "is-default": true,
++      "cpu-max": 1024,
++      "alias": "pseries"
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pseries-2.12-sxxm",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "bamboo",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "g3beige",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pseries-3.0",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pseries-2.10",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "prep",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pseries-2.11",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pseries-2.12",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pseries-2.9",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "mac99",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "pseries-2.6",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pseries-2.7",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pseries-2.8",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "pseries-2.4",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "pseries-2.5",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "pseries-2.2",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "taihu",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "pseries-2.3",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "pseries-2.1",
++      "cpu-max": 1024
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "40p",
++      "cpu-max": 1
++    }
++  ],
++  "id": "libvirt-39"
++}
++
++{
++  "execute": "query-cpu-definitions",
++  "id": "libvirt-40"
++}
++
++{
++  "return": [
++    {
++      "name": "default",
++      "typename": "604-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "ppc",
++      "typename": "604-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "ppc32",
++      "typename": "604-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "ppc64",
++      "typename": "970fx_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power9",
++      "typename": "host-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power8nvl",
++      "typename": "power8nvl_v1.0-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power8",
++      "typename": "power8_v2.0-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power8e",
++      "typename": "power8e_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power7+",
++      "typename": "power7+_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power7",
++      "typename": "power7_v2.3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power5gs",
++      "typename": "power5+_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power5+",
++      "typename": "power5+_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "970mp",
++      "typename": "970mp_v1.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "970fx",
++      "typename": "970fx_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "970",
++      "typename": "970_v2.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "apollo7pm",
++      "typename": "7457a_v1.0-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7457a",
++      "typename": "7457a_v1.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7447a",
++      "typename": "7447a_v1.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "apollo7",
++      "typename": "7457_v1.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7457",
++      "typename": "7457_v1.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7447",
++      "typename": "7447_v1.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "apollo6",
++      "typename": "7455_v3.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7455",
++      "typename": "7455_v3.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7445",
++      "typename": "7445_v3.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7451",
++      "typename": "7451_v2.3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7441",
++      "typename": "7441_v2.3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "vger",
++      "typename": "7450_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7450",
++      "typename": "7450_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7448",
++      "typename": "7448_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "nitro",
++      "typename": "7410_v1.4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7410",
++      "typename": "7410_v1.4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "g4",
++      "typename": "7400_v2.9-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "max",
++      "typename": "7400_v2.9-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7400",
++      "typename": "7400_v2.9-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "goldfinger",
++      "typename": "755_v2.8-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "755",
++      "typename": "755_v2.8-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "745",
++      "typename": "745_v2.8-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "lonestar",
++      "typename": "750l_v3.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750l",
++      "typename": "750l_v3.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750gx",
++      "typename": "750gx_v1.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750fx",
++      "typename": "750fx_v2.3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750cxe",
++      "typename": "750cxe_v3.1b-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750cx",
++      "typename": "750cx_v2.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750cl",
++      "typename": "750cl_v2.0-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "conan/doyle",
++      "typename": "750p-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "g3",
++      "typename": "750_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "typhoon",
++      "typename": "750_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750",
++      "typename": "750_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "arthur",
++      "typename": "740_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "740",
++      "typename": "740_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mach5",
++      "typename": "604r-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "sirocco",
++      "typename": "604e_v2.4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "604e",
++      "typename": "604e_v2.4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "goldeneye",
++      "typename": "603e7t-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "603r",
++      "typename": "603e7t-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "vaillant",
++      "typename": "603e7v-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "stretch",
++      "typename": "603e_v4.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "603e",
++      "typename": "603e_v4.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "vanilla",
++      "typename": "603-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "601v",
++      "typename": "601_v2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "601",
++      "typename": "601_v2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8560",
++      "typename": "mpc8560_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8555e",
++      "typename": "mpc8555e_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8555",
++      "typename": "mpc8555_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8548e",
++      "typename": "mpc8548e_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8548",
++      "typename": "mpc8548_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8547e",
++      "typename": "mpc8547e_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8545e",
++      "typename": "mpc8545e_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8545",
++      "typename": "mpc8545_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8544e",
++      "typename": "mpc8544e_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8544",
++      "typename": "mpc8544_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8543e",
++      "typename": "mpc8543e_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8543",
++      "typename": "mpc8543_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8541e",
++      "typename": "mpc8541e_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8541",
++      "typename": "mpc8541_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8540",
++      "typename": "mpc8540_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8533e",
++      "typename": "mpc8533e_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8533",
++      "typename": "mpc8533_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "e500v2",
++      "typename": "e500v2_v22-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "e500v1",
++      "typename": "e500_v20-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "e500",
++      "typename": "e500v2_v22-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8347ea",
++      "typename": "mpc8347eat-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8347e",
++      "typename": "mpc8347et-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8347a",
++      "typename": "mpc8347at-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8347",
++      "typename": "mpc8347t-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "e300",
++      "typename": "e300c3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "e200",
++      "typename": "e200z6-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8280",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8275",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8272",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8271",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8270",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8266_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8266_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8266",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8265_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8265_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8265",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8264_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8264_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8264",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8260_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8260_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8260",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8255_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8255_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8255",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8250_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8250_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8250",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8248",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8247",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8245",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8241",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "powerquicc-ii",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc82xx",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc5200b",
++      "typename": "mpc5200b_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc5200",
++      "typename": "mpc5200_v12-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc52xx",
++      "typename": "mpc5200_v12-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8240",
++      "typename": "603-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "460ex",
++      "typename": "460exb-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "440ep",
++      "typename": "440epb-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "x2vp50",
++      "typename": "x2vp20-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "x2vp7",
++      "typename": "x2vp4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "405gpe",
++      "typename": "405crc-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "405gp",
++      "typename": "405gpd-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "405cr",
++      "typename": "405crc-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "405",
++      "typename": "405d4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "403",
++      "typename": "403gc-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8547e_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cl_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457a_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2gp",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.7",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8377",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7455_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8545_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405d4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2le",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2hip3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8572",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970fx_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fx_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603p",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405gpb",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.7",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8544e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500v2_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500mc",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e7v1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970mp_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405crc",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "403ga",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7447a_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e300c1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8572e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500v2_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970fx_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750gx_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fx_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970fx_v3.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "604e_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.6",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401a1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power9_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "npe405h",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2ls",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7410_v1.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401b2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8349",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347ep",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7445_v3.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8540_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "403gcx",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750l_v3.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v3.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8541e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347p",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8555e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power9_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power7_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e7v",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v3.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.6",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405gpa",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "440epx",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750l_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e200z6",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8547e_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457a_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8349ea",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500v2_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power8nvl_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8540_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.8",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "npe405l",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8343ea",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8545_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7455_v3.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7448_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347et",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7441_v2.10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v1.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401c2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7451_v2.10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cx_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e7",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7448_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7441_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405crb",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "604",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "440-xilinx-w-dfpu",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7445_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "cobra",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8541_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750gx_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v2.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8641d",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543e_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750l_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7450_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.5",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7410_v1.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500v2_v30",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7455_v3.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8540_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405d2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8560_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8343",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347t",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v1.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "host",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347eap",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401d2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power8_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v3.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e200z5",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405cra",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.7",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8560_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e5500",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8544_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7448_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401e2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7410_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "x2vp4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347ap",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8533_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc5200b_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fx_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "601_v2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2legp3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "604e_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cx_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8610",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2h4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750l_v3.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8377e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e300c4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc5200_v12",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7448_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7450_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v3.1b",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.9",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405gpd",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e7t",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8555_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750gx_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8541_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543e_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fl",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750l_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "stb04",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548e_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "x2vp20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405ez",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e600",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7450_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8379",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7445_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7447_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2legp",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7455_v3.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8560_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "440-xilinx",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401f2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8533_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8349a",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405gpr",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "stb25",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc5200b_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fx_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347eat",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "601_v1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cx_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7447a_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "403gc",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e300c3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc5200_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7441_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v3.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8545e_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "602",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8378e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8343a",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "460exb",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8555_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8568",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457a_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cx_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "604e_v2.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.8",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405lp",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.6",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "stb03",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405ep",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8544_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347at",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7450_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7410_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750gl",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e6500",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750p",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7445_v3.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "440epb",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "npe4gs3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8349e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2lels",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2hip4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740p",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8567e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8533e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7451_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401g2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.8",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7455_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405gpc",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power7+_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8544e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7450_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970mp_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e7v2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "604r",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500v2_v22",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548e_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8545e_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8378",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8567",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7447_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970fx_v3.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.5",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8379e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8641",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v2.4b",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7410_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc603",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v4.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7445_v3.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "440epa",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970fx_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "iop480",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fx_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "601_v0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2legp1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cl_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxr",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8541e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v3.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8555e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power8e_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7447a_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "403gb",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e300c2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "npe405h2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8343e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8533e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc5200_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v3.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power5+_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8568e",
++      "typename": "",
++      "static": false
++    }
++  ],
++  "id": "libvirt-40"
++}
++
++{
++  "execute": "query-tpm-models",
++  "id": "libvirt-41"
++}
++
++{
++  "return": [
++  ],
++  "id": "libvirt-41"
++}
++
++{
++  "execute": "query-tpm-types",
++  "id": "libvirt-42"
++}
++
++{
++  "return": [
++    "emulator"
++  ],
++  "id": "libvirt-42"
++}
++
++{
++  "execute": "query-command-line-options",
++  "id": "libvirt-43"
++}
++
++{
++  "return": [
++    {
++      "parameters": [
++        {
++          "name": "timeout",
++          "help": "Request timeout in seconds (default 0 = no timeout)",
++          "type": "number"
++        },
++        {
++          "name": "initiator-name",
++          "help": "Initiator iqn name to use when connecting",
++          "type": "string"
++        },
++        {
++          "name": "header-digest",
++          "help": "HeaderDigest setting. {CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
++          "type": "string"
++        },
++        {
++          "name": "password-secret",
++          "help": "ID of the secret providing password for CHAP authentication to target",
++          "type": "string"
++        },
++        {
++          "name": "password",
++          "help": "password for CHAP authentication to target",
++          "type": "string"
++        },
++        {
++          "name": "user",
++          "help": "username for CHAP authentication to target",
++          "type": "string"
++        }
++      ],
++      "option": "iscsi"
++    },
++    {
++      "parameters": [
++        {
++          "name": "non-adaptive",
++          "type": "boolean"
++        },
++        {
++          "name": "lossy",
++          "type": "boolean"
++        },
++        {
++          "name": "acl",
++          "type": "boolean"
++        },
++        {
++          "name": "sasl",
++          "type": "boolean"
++        },
++        {
++          "name": "key-delay-ms",
++          "type": "number"
++        },
++        {
++          "name": "lock-key-sync",
++          "type": "boolean"
++        },
++        {
++          "name": "reverse",
++          "type": "boolean"
++        },
++        {
++          "name": "password",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv6",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv4",
++          "type": "boolean"
++        },
++        {
++          "name": "to",
++          "type": "number"
++        },
++        {
++          "name": "connections",
++          "type": "number"
++        },
++        {
++          "name": "head",
++          "type": "number"
++        },
++        {
++          "name": "display",
++          "type": "string"
++        },
++        {
++          "name": "share",
++          "type": "string"
++        },
++        {
++          "name": "tls-creds",
++          "type": "string"
++        },
++        {
++          "name": "websocket",
++          "type": "string"
++        },
++        {
++          "name": "vnc",
++          "type": "string"
++        }
++      ],
++      "option": "vnc"
++    },
++    {
++      "parameters": [
++        {
++          "name": "dmode",
++          "type": "number"
++        },
++        {
++          "name": "fmode",
++          "type": "number"
++        },
++        {
++          "name": "sock_fd",
++          "type": "number"
++        },
++        {
++          "name": "socket",
++          "type": "string"
++        },
++        {
++          "name": "readonly",
++          "type": "boolean"
++        },
++        {
++          "name": "writeout",
++          "type": "string"
++        },
++        {
++          "name": "security_model",
++          "type": "string"
++        },
++        {
++          "name": "mount_tag",
++          "type": "string"
++        },
++        {
++          "name": "path",
++          "type": "string"
++        },
++        {
++          "name": "fsdriver",
++          "type": "string"
++        }
++      ],
++      "option": "virtfs"
++    },
++    {
++      "parameters": [
++        {
++          "name": "throttling.iops-size",
++          "help": "when limiting by iops max size of an I/O in bytes",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max-length",
++          "help": "length of the bps-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max-length",
++          "help": "length of the bps-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max-length",
++          "help": "length of the bps-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max-length",
++          "help": "length of the iops-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max-length",
++          "help": "length of the iops-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max-length",
++          "help": "length of the iops-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max",
++          "help": "total bytes write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max",
++          "help": "total bytes read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max",
++          "help": "total bytes burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max",
++          "help": "I/O operations write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max",
++          "help": "I/O operations read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max",
++          "help": "I/O operations burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write",
++          "help": "limit write bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read",
++          "help": "limit read bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total",
++          "help": "limit total bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write",
++          "help": "limit write operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read",
++          "help": "limit read operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total",
++          "help": "limit total I/O operations per second",
++          "type": "number"
++        },
++        {
++          "name": "dmode",
++          "type": "number"
++        },
++        {
++          "name": "fmode",
++          "type": "number"
++        },
++        {
++          "name": "sock_fd",
++          "type": "number"
++        },
++        {
++          "name": "socket",
++          "type": "string"
++        },
++        {
++          "name": "readonly",
++          "type": "boolean"
++        },
++        {
++          "name": "writeout",
++          "type": "string"
++        },
++        {
++          "name": "security_model",
++          "type": "string"
++        },
++        {
++          "name": "path",
++          "type": "string"
++        },
++        {
++          "name": "fsdriver",
++          "type": "string"
++        }
++      ],
++      "option": "fsdev"
++    },
++    {
++      "parameters": [
++        {
++          "name": "resourcecontrol",
++          "type": "string"
++        },
++        {
++          "name": "spawn",
++          "type": "string"
++        },
++        {
++          "name": "elevateprivileges",
++          "type": "string"
++        },
++        {
++          "name": "obsolete",
++          "type": "string"
++        },
++        {
++          "name": "enable",
++          "type": "boolean"
++        }
++      ],
++      "option": "sandbox"
++    },
++    {
++      "parameters": [
++        {
++          "name": "string",
++          "help": "Sets content of the blob to be inserted from a string",
++          "type": "string"
++        },
++        {
++          "name": "file",
++          "help": "Sets the name of the file from which the fw_cfg blob will be loaded",
++          "type": "string"
++        },
++        {
++          "name": "name",
++          "help": "Sets the fw_cfg name of the blob to be inserted",
++          "type": "string"
++        }
++      ],
++      "option": "fw_cfg"
++    },
++    {
++      "parameters": [
++        {
++          "name": "arg",
++          "type": "string"
++        },
++        {
++          "name": "target",
++          "type": "string"
++        },
++        {
++          "name": "enable",
++          "type": "boolean"
++        }
++      ],
++      "option": "semihosting-config"
++    },
++    {
++      "parameters": [
++        {
++          "name": "rrsnapshot",
++          "type": "string"
++        },
++        {
++          "name": "rrfile",
++          "type": "string"
++        },
++        {
++          "name": "rr",
++          "type": "string"
++        },
++        {
++          "name": "sleep",
++          "type": "boolean"
++        },
++        {
++          "name": "align",
++          "type": "boolean"
++        },
++        {
++          "name": "shift",
++          "type": "string"
++        }
++      ],
++      "option": "icount"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "numa"
++    },
++    {
++      "parameters": [
++        {
++          "name": "debug-threads",
++          "help": "When enabled, name the individual threads; defaults off.\nNOTE: The thread names are for debugging and not a\nstable API.",
++          "type": "boolean"
++        },
++        {
++          "name": "process",
++          "help": "Sets the name of the QEMU process, as shown in top etc",
++          "type": "string"
++        },
++        {
++          "name": "guest",
++          "help": "Sets the name of the guest.\nThis name will be displayed in the SDL window caption.\nThe name will also be used for the VNC server",
++          "type": "string"
++        }
++      ],
++      "option": "name"
++    },
++    {
++      "parameters": [
++        {
++          "name": "timestamp",
++          "type": "boolean"
++        }
++      ],
++      "option": "msg"
++    },
++    {
++      "parameters": [
++        {
++          "name": "cpu-pm",
++          "type": "boolean"
++        },
++        {
++          "name": "mem-lock",
++          "type": "boolean"
++        }
++      ],
++      "option": "overcommit"
++    },
++    {
++      "parameters": [
++        {
++          "name": "mlock",
++          "type": "boolean"
++        }
++      ],
++      "option": "realtime"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "tpmdev"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "object"
++    },
++    {
++      "parameters": [
++        {
++          "name": "opaque",
++          "help": "free-form string used to describe fd",
++          "type": "string"
++        },
++        {
++          "name": "set",
++          "help": "ID of the fd set to add fd to",
++          "type": "number"
++        },
++        {
++          "name": "fd",
++          "help": "file descriptor of which a duplicate is added to fd set",
++          "type": "number"
++        }
++      ],
++      "option": "add-fd"
++    },
++    {
++      "parameters": [
++        {
++          "name": "strict",
++          "type": "boolean"
++        },
++        {
++          "name": "reboot-timeout",
++          "type": "string"
++        },
++        {
++          "name": "splash-time",
++          "type": "string"
++        },
++        {
++          "name": "splash",
++          "type": "string"
++        },
++        {
++          "name": "menu",
++          "type": "boolean"
++        },
++        {
++          "name": "once",
++          "type": "string"
++        },
++        {
++          "name": "order",
++          "type": "string"
++        }
++      ],
++      "option": "boot-opts"
++    },
++    {
++      "parameters": [
++        {
++          "name": "maxcpus",
++          "type": "number"
++        },
++        {
++          "name": "threads",
++          "type": "number"
++        },
++        {
++          "name": "cores",
++          "type": "number"
++        },
++        {
++          "name": "sockets",
++          "type": "number"
++        },
++        {
++          "name": "cpus",
++          "type": "number"
++        }
++      ],
++      "option": "smp-opts"
++    },
++    {
++      "parameters": [
++        {
++          "name": "maxmem",
++          "type": "size"
++        },
++        {
++          "name": "slots",
++          "type": "number"
++        },
++        {
++          "name": "size",
++          "type": "size"
++        }
++      ],
++      "option": "memory"
++    },
++    {
++      "parameters": [
++        {
++          "name": "thread",
++          "help": "Enable/disable multi-threaded TCG",
++          "type": "string"
++        },
++        {
++          "name": "accel",
++          "help": "Select the type of accelerator",
++          "type": "string"
++        }
++      ],
++      "option": "accel"
++    },
++    {
++      "parameters": [
++        {
++          "name": "loadparm",
++          "help": "Up to 8 chars in set of [A-Za-z0-9. ](lower case chars converted to upper case) to pass to machine loader, boot manager, and guest kernel",
++          "type": "string"
++        },
++        {
++          "name": "dea-key-wrap",
++          "help": "enable/disable DEA key wrapping using the CPACF wrapping key",
++          "type": "boolean"
++        },
++        {
++          "name": "aes-key-wrap",
++          "help": "enable/disable AES key wrapping using the CPACF wrapping key",
++          "type": "boolean"
++        },
++        {
++          "name": "suppress-vmdesc",
++          "help": "Set on to disable self-describing migration",
++          "type": "boolean"
++        },
++        {
++          "name": "iommu",
++          "help": "Set on/off to enable/disable Intel IOMMU (VT-d)",
++          "type": "boolean"
++        },
++        {
++          "name": "firmware",
++          "help": "firmware image",
++          "type": "string"
++        },
++        {
++          "name": "usb",
++          "help": "Set on/off to enable/disable usb",
++          "type": "boolean"
++        },
++        {
++          "name": "mem-merge",
++          "help": "enable/disable memory merge support",
++          "type": "boolean"
++        },
++        {
++          "name": "dump-guest-core",
++          "help": "Include guest memory in  a core dump",
++          "type": "boolean"
++        },
++        {
++          "name": "dt_compatible",
++          "help": "Overrides the \"compatible\" property of the dt root node",
++          "type": "string"
++        },
++        {
++          "name": "phandle_start",
++          "help": "The first phandle ID we may generate dynamically",
++          "type": "number"
++        },
++        {
++          "name": "dumpdtb",
++          "help": "Dump current dtb to a file and quit",
++          "type": "string"
++        },
++        {
++          "name": "dtb",
++          "help": "Linux kernel device tree file",
++          "type": "string"
++        },
++        {
++          "name": "append",
++          "help": "Linux kernel command line",
++          "type": "string"
++        },
++        {
++          "name": "initrd",
++          "help": "Linux initial ramdisk file",
++          "type": "string"
++        },
++        {
++          "name": "kernel",
++          "help": "Linux kernel image file",
++          "type": "string"
++        },
++        {
++          "name": "kvm_shadow_mem",
++          "help": "KVM shadow MMU size",
++          "type": "size"
++        },
++        {
++          "name": "kernel_irqchip",
++          "help": "use KVM in-kernel irqchip",
++          "type": "boolean"
++        },
++        {
++          "name": "accel",
++          "help": "accelerator list",
++          "type": "string"
++        },
++        {
++          "name": "type",
++          "help": "emulated machine",
++          "type": "string"
++        }
++      ],
++      "option": "machine"
++    },
++    {
++      "parameters": [
++        {
++          "name": "romfile",
++          "type": "string"
++        },
++        {
++          "name": "bootindex",
++          "type": "number"
++        }
++      ],
++      "option": "option-rom"
++    },
++    {
++      "parameters": [
++        {
++          "name": "file",
++          "type": "string"
++        },
++        {
++          "name": "events",
++          "type": "string"
++        },
++        {
++          "name": "enable",
++          "type": "string"
++        }
++      ],
++      "option": "trace"
++    },
++    {
++      "parameters": [
++        {
++          "name": "x-oob",
++          "type": "boolean"
++        },
++        {
++          "name": "pretty",
++          "type": "boolean"
++        },
++        {
++          "name": "chardev",
++          "type": "string"
++        },
++        {
++          "name": "mode",
++          "type": "string"
++        }
++      ],
++      "option": "mon"
++    },
++    {
++      "parameters": [
++        {
++          "name": "value",
++          "type": "string"
++        },
++        {
++          "name": "property",
++          "type": "string"
++        },
++        {
++          "name": "driver",
++          "type": "string"
++        }
++      ],
++      "option": "global"
++    },
++    {
++      "parameters": [
++        {
++          "name": "driftfix",
++          "type": "string"
++        },
++        {
++          "name": "clock",
++          "type": "string"
++        },
++        {
++          "name": "base",
++          "type": "string"
++        }
++      ],
++      "option": "rtc"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "net"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "nic"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "netdev"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "device"
++    },
++    {
++      "parameters": [
++        {
++          "name": "logappend",
++          "type": "boolean"
++        },
++        {
++          "name": "logfile",
++          "type": "string"
++        },
++        {
++          "name": "append",
++          "type": "boolean"
++        },
++        {
++          "name": "chardev",
++          "type": "string"
++        },
++        {
++          "name": "size",
++          "type": "size"
++        },
++        {
++          "name": "debug",
++          "type": "number"
++        },
++        {
++          "name": "name",
++          "type": "string"
++        },
++        {
++          "name": "signal",
++          "type": "boolean"
++        },
++        {
++          "name": "mux",
++          "type": "boolean"
++        },
++        {
++          "name": "rows",
++          "type": "number"
++        },
++        {
++          "name": "cols",
++          "type": "number"
++        },
++        {
++          "name": "height",
++          "type": "number"
++        },
++        {
++          "name": "width",
++          "type": "number"
++        },
++        {
++          "name": "websocket",
++          "type": "boolean"
++        },
++        {
++          "name": "tls-creds",
++          "type": "string"
++        },
++        {
++          "name": "tn3270",
++          "type": "boolean"
++        },
++        {
++          "name": "telnet",
++          "type": "boolean"
++        },
++        {
++          "name": "reconnect",
++          "type": "number"
++        },
++        {
++          "name": "delay",
++          "type": "boolean"
++        },
++        {
++          "name": "server",
++          "type": "boolean"
++        },
++        {
++          "name": "wait",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv6",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv4",
++          "type": "boolean"
++        },
++        {
++          "name": "to",
++          "type": "number"
++        },
++        {
++          "name": "localport",
++          "type": "string"
++        },
++        {
++          "name": "localaddr",
++          "type": "string"
++        },
++        {
++          "name": "fd",
++          "type": "string"
++        },
++        {
++          "name": "port",
++          "type": "string"
++        },
++        {
++          "name": "host",
++          "type": "string"
++        },
++        {
++          "name": "path",
++          "type": "string"
++        },
++        {
++          "name": "backend",
++          "type": "string"
++        }
++      ],
++      "option": "chardev"
++    },
++    {
++      "parameters": [
++        {
++          "name": "copy-on-read",
++          "help": "copy read data from backing file into image file",
++          "type": "boolean"
++        },
++        {
++          "name": "werror",
++          "help": "write error action",
++          "type": "string"
++        },
++        {
++          "name": "rerror",
++          "help": "read error action",
++          "type": "string"
++        },
++        {
++          "name": "read-only",
++          "help": "open drive file as read-only",
++          "type": "boolean"
++        },
++        {
++          "name": "file",
++          "help": "file name",
++          "type": "string"
++        },
++        {
++          "name": "if",
++          "help": "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
++          "type": "string"
++        },
++        {
++          "name": "media",
++          "help": "media type (disk, cdrom)",
++          "type": "string"
++        },
++        {
++          "name": "index",
++          "help": "index number",
++          "type": "number"
++        },
++        {
++          "name": "unit",
++          "help": "unit number (i.e. lun for scsi)",
++          "type": "number"
++        },
++        {
++          "name": "bus",
++          "help": "bus number",
++          "type": "number"
++        },
++        {
++          "name": "stats-account-failed",
++          "help": "whether to account for failed I/O operations in the statistics",
++          "type": "boolean"
++        },
++        {
++          "name": "stats-account-invalid",
++          "help": "whether to account for invalid I/O operations in the statistics",
++          "type": "boolean"
++        },
++        {
++          "name": "detect-zeroes",
++          "help": "try to optimize zero writes (off, on, unmap)",
++          "type": "string"
++        },
++        {
++          "name": "throttling.group",
++          "help": "name of the block throttling group",
++          "type": "string"
++        },
++        {
++          "name": "throttling.iops-size",
++          "help": "when limiting by iops max size of an I/O in bytes",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max-length",
++          "help": "length of the bps-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max-length",
++          "help": "length of the bps-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max-length",
++          "help": "length of the bps-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max-length",
++          "help": "length of the iops-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max-length",
++          "help": "length of the iops-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max-length",
++          "help": "length of the iops-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max",
++          "help": "total bytes write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max",
++          "help": "total bytes read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max",
++          "help": "total bytes burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max",
++          "help": "I/O operations write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max",
++          "help": "I/O operations read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max",
++          "help": "I/O operations burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write",
++          "help": "limit write bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read",
++          "help": "limit read bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total",
++          "help": "limit total bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write",
++          "help": "limit write operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read",
++          "help": "limit read operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total",
++          "help": "limit total I/O operations per second",
++          "type": "number"
++        },
++        {
++          "name": "werror",
++          "help": "write error action",
++          "type": "string"
++        },
++        {
++          "name": "format",
++          "help": "disk format (raw, qcow2, ...)",
++          "type": "string"
++        },
++        {
++          "name": "cache.writeback",
++          "help": "Enable writeback mode",
++          "type": "boolean"
++        },
++        {
++          "name": "aio",
++          "help": "host AIO implementation (threads, native)",
++          "type": "string"
++        },
++        {
++          "name": "snapshot",
++          "help": "enable/disable snapshot mode",
++          "type": "boolean"
++        },
++        {
++          "name": "force-share",
++          "help": "always accept other writers (default: off)",
++          "type": "boolean"
++        },
++        {
++          "name": "discard",
++          "help": "discard operation (ignore/off, unmap/on)",
++          "type": "string"
++        },
++        {
++          "name": "auto-read-only",
++          "help": "Node can become read-only if opening read-write fails",
++          "type": "boolean"
++        },
++        {
++          "name": "cache.no-flush",
++          "help": "Ignore flush requests",
++          "type": "boolean"
++        },
++        {
++          "name": "cache.direct",
++          "help": "Bypass software writeback cache on the host",
++          "type": "boolean"
++        },
++        {
++          "name": "driver",
++          "help": "Block driver to use for the node",
++          "type": "string"
++        },
++        {
++          "name": "node-name",
++          "help": "Node name of the block device node",
++          "type": "string"
++        }
++      ],
++      "option": "drive"
++    }
++  ],
++  "id": "libvirt-43"
++}
++
++{
++  "execute": "query-migrate-capabilities",
++  "id": "libvirt-44"
++}
++
++{
++  "return": [
++    {
++      "state": false,
++      "capability": "xbzrle"
++    },
++    {
++      "state": false,
++      "capability": "rdma-pin-all"
++    },
++    {
++      "state": false,
++      "capability": "auto-converge"
++    },
++    {
++      "state": false,
++      "capability": "zero-blocks"
++    },
++    {
++      "state": false,
++      "capability": "compress"
++    },
++    {
++      "state": false,
++      "capability": "events"
++    },
++    {
++      "state": false,
++      "capability": "postcopy-ram"
++    },
++    {
++      "state": false,
++      "capability": "x-colo"
++    },
++    {
++      "state": false,
++      "capability": "release-ram"
++    },
++    {
++      "state": false,
++      "capability": "block"
++    },
++    {
++      "state": false,
++      "capability": "return-path"
++    },
++    {
++      "state": false,
++      "capability": "pause-before-switchover"
++    },
++    {
++      "state": false,
++      "capability": "x-multifd"
++    },
++    {
++      "state": false,
++      "capability": "dirty-bitmaps"
++    },
++    {
++      "state": false,
++      "capability": "postcopy-blocktime"
++    },
++    {
++      "state": false,
++      "capability": "late-block-activate"
++    }
++  ],
++  "id": "libvirt-44"
++}
++
++{
++  "execute": "query-qmp-schema",
++  "id": "libvirt-45"
++}
++
++{
++  "return": [
++    {
++      "name": "query-status",
++      "ret-type": "1",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "SHUTDOWN",
++      "meta-type": "event",
++      "arg-type": "2"
++    },
++    {
++      "name": "POWERDOWN",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "RESET",
++      "meta-type": "event",
++      "arg-type": "3"
++    },
++    {
++      "name": "STOP",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "RESUME",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "SUSPEND",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "SUSPEND_DISK",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "WAKEUP",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "WATCHDOG",
++      "meta-type": "event",
++      "arg-type": "4"
++    },
++    {
++      "name": "watchdog-set-action",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "5"
++    },
++    {
++      "name": "GUEST_PANICKED",
++      "meta-type": "event",
++      "arg-type": "6"
++    },
++    {
++      "name": "JOB_STATUS_CHANGE",
++      "meta-type": "event",
++      "arg-type": "7"
++    },
++    {
++      "name": "job-pause",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "8"
++    },
++    {
++      "name": "job-resume",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "9"
++    },
++    {
++      "name": "job-cancel",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "10"
++    },
++    {
++      "name": "job-complete",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "11"
++    },
++    {
++      "name": "job-dismiss",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "12"
++    },
++    {
++      "name": "job-finalize",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "13"
++    },
++    {
++      "name": "query-jobs",
++      "ret-type": "[14]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "x-block-latency-histogram-set",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "15"
++    },
++    {
++      "name": "query-block",
++      "ret-type": "[16]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-blockstats",
++      "ret-type": "[18]",
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-block-jobs",
++      "ret-type": "[19]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "block_passwd",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "20"
++    },
++    {
++      "name": "block_resize",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "21"
++    },
++    {
++      "name": "blockdev-snapshot-sync",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "22"
++    },
++    {
++      "name": "blockdev-snapshot",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "23"
++    },
++    {
++      "name": "change-backing-file",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "24"
++    },
++    {
++      "name": "block-commit",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "25"
++    },
++    {
++      "name": "drive-backup",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "26"
++    },
++    {
++      "name": "blockdev-backup",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "27"
++    },
++    {
++      "name": "query-named-block-nodes",
++      "ret-type": "[28]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "drive-mirror",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "29"
++    },
++    {
++      "name": "block-dirty-bitmap-add",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "30"
++    },
++    {
++      "name": "block-dirty-bitmap-remove",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "block-dirty-bitmap-clear",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "x-block-dirty-bitmap-enable",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "x-block-dirty-bitmap-disable",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "x-block-dirty-bitmap-merge",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "32"
++    },
++    {
++      "name": "x-debug-block-dirty-bitmap-sha256",
++      "ret-type": "33",
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "blockdev-mirror",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "34"
++    },
++    {
++      "name": "block_set_io_throttle",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "35"
++    },
++    {
++      "name": "block-stream",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "36"
++    },
++    {
++      "name": "block-job-set-speed",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "37"
++    },
++    {
++      "name": "block-job-cancel",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "38"
++    },
++    {
++      "name": "block-job-pause",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "39"
++    },
++    {
++      "name": "block-job-resume",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "40"
++    },
++    {
++      "name": "block-job-complete",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "41"
++    },
++    {
++      "name": "block-job-dismiss",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "42"
++    },
++    {
++      "name": "block-job-finalize",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "43"
++    },
++    {
++      "name": "blockdev-add",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "44"
++    },
++    {
++      "name": "blockdev-del",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "45"
++    },
++    {
++      "name": "blockdev-create",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "46"
++    },
++    {
++      "name": "blockdev-open-tray",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "47"
++    },
++    {
++      "name": "blockdev-close-tray",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "48"
++    },
++    {
++      "name": "blockdev-remove-medium",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "49"
++    },
++    {
++      "name": "blockdev-insert-medium",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "50"
++    },
++    {
++      "name": "blockdev-change-medium",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "51"
++    },
++    {
++      "name": "BLOCK_IMAGE_CORRUPTED",
++      "meta-type": "event",
++      "arg-type": "52"
++    },
++    {
++      "name": "BLOCK_IO_ERROR",
++      "meta-type": "event",
++      "arg-type": "53"
++    },
++    {
++      "name": "BLOCK_JOB_COMPLETED",
++      "meta-type": "event",
++      "arg-type": "54"
++    },
++    {
++      "name": "BLOCK_JOB_CANCELLED",
++      "meta-type": "event",
++      "arg-type": "55"
++    },
++    {
++      "name": "BLOCK_JOB_ERROR",
++      "meta-type": "event",
++      "arg-type": "56"
++    },
++    {
++      "name": "BLOCK_JOB_READY",
++      "meta-type": "event",
++      "arg-type": "57"
++    },
++    {
++      "name": "BLOCK_JOB_PENDING",
++      "meta-type": "event",
++      "arg-type": "58"
++    },
++    {
++      "name": "BLOCK_WRITE_THRESHOLD",
++      "meta-type": "event",
++      "arg-type": "59"
++    },
++    {
++      "name": "block-set-write-threshold",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "60"
++    },
++    {
++      "name": "x-blockdev-change",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "61"
++    },
++    {
++      "name": "x-blockdev-set-iothread",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "62"
++    },
++    {
++      "name": "query-pr-managers",
++      "ret-type": "[63]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "blockdev-snapshot-internal-sync",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "64"
++    },
++    {
++      "name": "blockdev-snapshot-delete-internal-sync",
++      "ret-type": "66",
++      "meta-type": "command",
++      "arg-type": "65"
++    },
++    {
++      "name": "eject",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "67"
++    },
++    {
++      "name": "nbd-server-start",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "68"
++    },
++    {
++      "name": "nbd-server-add",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "69"
++    },
++    {
++      "name": "nbd-server-remove",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "70"
++    },
++    {
++      "name": "x-nbd-server-add-bitmap",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "71"
++    },
++    {
++      "name": "nbd-server-stop",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "DEVICE_TRAY_MOVED",
++      "meta-type": "event",
++      "arg-type": "72"
++    },
++    {
++      "name": "PR_MANAGER_STATUS_CHANGED",
++      "meta-type": "event",
++      "arg-type": "73"
++    },
++    {
++      "name": "QUORUM_FAILURE",
++      "meta-type": "event",
++      "arg-type": "74"
++    },
++    {
++      "name": "QUORUM_REPORT_BAD",
++      "meta-type": "event",
++      "arg-type": "75"
++    },
++    {
++      "name": "query-chardev",
++      "ret-type": "[76]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-chardev-backends",
++      "ret-type": "[77]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "ringbuf-write",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "78"
++    },
++    {
++      "name": "ringbuf-read",
++      "ret-type": "str",
++      "meta-type": "command",
++      "arg-type": "79"
++    },
++    {
++      "name": "chardev-add",
++      "ret-type": "81",
++      "meta-type": "command",
++      "arg-type": "80"
++    },
++    {
++      "name": "chardev-change",
++      "ret-type": "81",
++      "meta-type": "command",
++      "arg-type": "82"
++    },
++    {
++      "name": "chardev-remove",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "83"
++    },
++    {
++      "name": "chardev-send-break",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "84"
++    },
++    {
++      "name": "VSERPORT_CHANGE",
++      "meta-type": "event",
++      "arg-type": "85"
++    },
++    {
++      "name": "set_link",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "86"
++    },
++    {
++      "name": "netdev_add",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "87"
++    },
++    {
++      "name": "netdev_del",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "88"
++    },
++    {
++      "name": "query-rx-filter",
++      "ret-type": "[90]",
++      "meta-type": "command",
++      "arg-type": "89"
++    },
++    {
++      "name": "NIC_RX_FILTER_CHANGED",
++      "meta-type": "event",
++      "arg-type": "91"
++    },
++    {
++      "name": "query-rocker",
++      "ret-type": "93",
++      "meta-type": "command",
++      "arg-type": "92"
++    },
++    {
++      "name": "query-rocker-ports",
++      "ret-type": "[95]",
++      "meta-type": "command",
++      "arg-type": "94"
++    },
++    {
++      "name": "query-rocker-of-dpa-flows",
++      "ret-type": "[97]",
++      "meta-type": "command",
++      "arg-type": "96"
++    },
++    {
++      "name": "query-rocker-of-dpa-groups",
++      "ret-type": "[99]",
++      "meta-type": "command",
++      "arg-type": "98"
++    },
++    {
++      "name": "query-tpm-models",
++      "ret-type": "[100]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-tpm-types",
++      "ret-type": "[101]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-tpm",
++      "ret-type": "[102]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "set_password",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "103"
++    },
++    {
++      "name": "expire_password",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "104"
++    },
++    {
++      "name": "screendump",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "105"
++    },
++    {
++      "name": "query-vnc",
++      "ret-type": "110",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-vnc-servers",
++      "ret-type": "[111]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "change-vnc-password",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "112"
++    },
++    {
++      "name": "VNC_CONNECTED",
++      "meta-type": "event",
++      "arg-type": "113"
++    },
++    {
++      "name": "VNC_INITIALIZED",
++      "meta-type": "event",
++      "arg-type": "114"
++    },
++    {
++      "name": "VNC_DISCONNECTED",
++      "meta-type": "event",
++      "arg-type": "115"
++    },
++    {
++      "name": "query-mice",
++      "ret-type": "[116]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "send-key",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "117"
++    },
++    {
++      "name": "input-send-event",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "118"
++    },
++    {
++      "name": "query-migrate",
++      "ret-type": "119",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate-set-capabilities",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "120"
++    },
++    {
++      "name": "query-migrate-capabilities",
++      "ret-type": "[121]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate-set-parameters",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "122"
++    },
++    {
++      "name": "query-migrate-parameters",
++      "ret-type": "123",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "client_migrate_info",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "124"
++    },
++    {
++      "name": "migrate-start-postcopy",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "MIGRATION",
++      "meta-type": "event",
++      "arg-type": "125"
++    },
++    {
++      "name": "MIGRATION_PASS",
++      "meta-type": "event",
++      "arg-type": "126"
++    },
++    {
++      "name": "COLO_EXIT",
++      "meta-type": "event",
++      "arg-type": "127"
++    },
++    {
++      "name": "x-colo-lost-heartbeat",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate_cancel",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate-continue",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "128"
++    },
++    {
++      "name": "migrate_set_downtime",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "129"
++    },
++    {
++      "name": "migrate_set_speed",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "130"
++    },
++    {
++      "name": "migrate-set-cache-size",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "131"
++    },
++    {
++      "name": "query-migrate-cache-size",
++      "ret-type": "int",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "132"
++    },
++    {
++      "name": "migrate-incoming",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "133"
++    },
++    {
++      "name": "xen-save-devices-state",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "134"
++    },
++    {
++      "name": "xen-set-replication",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "135"
++    },
++    {
++      "name": "query-xen-replication-status",
++      "ret-type": "136",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "xen-colo-do-checkpoint",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-colo-status",
++      "ret-type": "137",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate-recover",
++      "ret-type": "0",
++      "allow-oob": true,
++      "meta-type": "command",
++      "arg-type": "138"
++    },
++    {
++      "name": "migrate-pause",
++      "ret-type": "0",
++      "allow-oob": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "transaction",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "139"
++    },
++    {
++      "name": "trace-event-get-state",
++      "ret-type": "[141]",
++      "meta-type": "command",
++      "arg-type": "140"
++    },
++    {
++      "name": "trace-event-set-state",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "142"
++    },
++    {
++      "name": "query-qmp-schema",
++      "ret-type": "[143]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "qmp_capabilities",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "144"
++    },
++    {
++      "name": "query-version",
++      "ret-type": "145",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-commands",
++      "ret-type": "[146]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "add_client",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "147"
++    },
++    {
++      "name": "query-name",
++      "ret-type": "148",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-kvm",
++      "ret-type": "149",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-uuid",
++      "ret-type": "150",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-events",
++      "ret-type": "[151]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-cpus",
++      "ret-type": "[152]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-cpus-fast",
++      "ret-type": "[153]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-iothreads",
++      "ret-type": "[154]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-balloon",
++      "ret-type": "155",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "BALLOON_CHANGE",
++      "meta-type": "event",
++      "arg-type": "156"
++    },
++    {
++      "name": "query-pci",
++      "ret-type": "[157]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "quit",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "stop",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "system_reset",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "system_powerdown",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "cpu-add",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "158"
++    },
++    {
++      "name": "memsave",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "159"
++    },
++    {
++      "name": "pmemsave",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "160"
++    },
++    {
++      "name": "cont",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "x-exit-preconfig",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "system_wakeup",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "inject-nmi",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "balloon",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "161"
++    },
++    {
++      "name": "human-monitor-command",
++      "ret-type": "str",
++      "meta-type": "command",
++      "arg-type": "162"
++    },
++    {
++      "name": "qom-list",
++      "ret-type": "[164]",
++      "meta-type": "command",
++      "arg-type": "163"
++    },
++    {
++      "name": "qom-get",
++      "ret-type": "any",
++      "meta-type": "command",
++      "arg-type": "165"
++    },
++    {
++      "name": "qom-set",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "166"
++    },
++    {
++      "name": "change",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "167"
++    },
++    {
++      "name": "qom-list-types",
++      "ret-type": "[169]",
++      "meta-type": "command",
++      "arg-type": "168"
++    },
++    {
++      "name": "device-list-properties",
++      "ret-type": "[164]",
++      "meta-type": "command",
++      "arg-type": "170"
++    },
++    {
++      "name": "qom-list-properties",
++      "ret-type": "[164]",
++      "meta-type": "command",
++      "arg-type": "171"
++    },
++    {
++      "name": "xen-set-global-dirty-log",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "172"
++    },
++    {
++      "name": "device_add",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "173"
++    },
++    {
++      "name": "device_del",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "174"
++    },
++    {
++      "name": "DEVICE_DELETED",
++      "meta-type": "event",
++      "arg-type": "175"
++    },
++    {
++      "name": "dump-guest-memory",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "176"
++    },
++    {
++      "name": "query-dump",
++      "ret-type": "177",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "DUMP_COMPLETED",
++      "meta-type": "event",
++      "arg-type": "178"
++    },
++    {
++      "name": "query-dump-guest-memory-capability",
++      "ret-type": "179",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "dump-skeys",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "180"
++    },
++    {
++      "name": "object-add",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "181"
++    },
++    {
++      "name": "object-del",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "182"
++    },
++    {
++      "name": "getfd",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "183"
++    },
++    {
++      "name": "closefd",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "184"
++    },
++    {
++      "name": "query-machines",
++      "ret-type": "[185]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-memory-size-summary",
++      "ret-type": "186",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-cpu-definitions",
++      "ret-type": "[187]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-cpu-model-expansion",
++      "ret-type": "189",
++      "meta-type": "command",
++      "arg-type": "188"
++    },
++    {
++      "name": "query-cpu-model-comparison",
++      "ret-type": "191",
++      "meta-type": "command",
++      "arg-type": "190"
++    },
++    {
++      "name": "query-cpu-model-baseline",
++      "ret-type": "193",
++      "meta-type": "command",
++      "arg-type": "192"
++    },
++    {
++      "name": "add-fd",
++      "ret-type": "195",
++      "meta-type": "command",
++      "arg-type": "194"
++    },
++    {
++      "name": "remove-fd",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "196"
++    },
++    {
++      "name": "query-fdsets",
++      "ret-type": "[197]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-target",
++      "ret-type": "198",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-command-line-options",
++      "ret-type": "[200]",
++      "meta-type": "command",
++      "arg-type": "199"
++    },
++    {
++      "name": "query-memdev",
++      "ret-type": "[201]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-memory-devices",
++      "ret-type": "[202]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "MEM_UNPLUG_ERROR",
++      "meta-type": "event",
++      "arg-type": "203"
++    },
++    {
++      "name": "query-acpi-ospm-status",
++      "ret-type": "[204]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "ACPI_DEVICE_OST",
++      "meta-type": "event",
++      "arg-type": "205"
++    },
++    {
++      "name": "rtc-reset-reinjection",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "RTC_CHANGE",
++      "meta-type": "event",
++      "arg-type": "206"
++    },
++    {
++      "name": "xen-load-devices-state",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "207"
++    },
++    {
++      "name": "query-gic-capabilities",
++      "ret-type": "[208]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-hotpluggable-cpus",
++      "ret-type": "[209]",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-vm-generation-id",
++      "ret-type": "210",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-sev",
++      "ret-type": "211",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-sev-launch-measure",
++      "ret-type": "212",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-sev-capabilities",
++      "ret-type": "213",
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "COMMAND_DROPPED",
++      "meta-type": "event",
++      "arg-type": "214"
++    },
++    {
++      "name": "set-numa-node",
++      "ret-type": "0",
++      "meta-type": "command",
++      "arg-type": "215"
++    },
++    {
++      "name": "0",
++      "members": [
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "1",
++      "members": [
++        {
++          "name": "running",
++          "type": "bool"
++        },
++        {
++          "name": "singlestep",
++          "type": "bool"
++        },
++        {
++          "name": "status",
++          "type": "216"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "2",
++      "members": [
++        {
++          "name": "guest",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "3",
++      "members": [
++        {
++          "name": "guest",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "4",
++      "members": [
++        {
++          "name": "action",
++          "type": "217"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "5",
++      "members": [
++        {
++          "name": "action",
++          "type": "217"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "6",
++      "members": [
++        {
++          "name": "action",
++          "type": "218"
++        },
++        {
++          "name": "info",
++          "default": null,
++          "type": "219"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "7",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "status",
++          "type": "220"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "8",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "9",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "10",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "11",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "12",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "13",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[14]",
++      "element-type": "14",
++      "meta-type": "array"
++    },
++    {
++      "name": "14",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "221"
++        },
++        {
++          "name": "status",
++          "type": "220"
++        },
++        {
++          "name": "current-progress",
++          "type": "int"
++        },
++        {
++          "name": "total-progress",
++          "type": "int"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "15",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "boundaries",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "boundaries-read",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "boundaries-write",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "boundaries-flush",
++          "default": null,
++          "type": "[int]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[16]",
++      "element-type": "16",
++      "meta-type": "array"
++    },
++    {
++      "name": "16",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "qdev",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "removable",
++          "type": "bool"
++        },
++        {
++          "name": "locked",
++          "type": "bool"
++        },
++        {
++          "name": "inserted",
++          "default": null,
++          "type": "28"
++        },
++        {
++          "name": "tray_open",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "io-status",
++          "default": null,
++          "type": "222"
++        },
++        {
++          "name": "dirty-bitmaps",
++          "default": null,
++          "type": "[223]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "17",
++      "members": [
++        {
++          "name": "query-nodes",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[18]",
++      "element-type": "18",
++      "meta-type": "array"
++    },
++    {
++      "name": "18",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "qdev",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "stats",
++          "type": "224"
++        },
++        {
++          "name": "parent",
++          "default": null,
++          "type": "18"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "18"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[19]",
++      "element-type": "19",
++      "meta-type": "array"
++    },
++    {
++      "name": "19",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "busy",
++          "type": "bool"
++        },
++        {
++          "name": "paused",
++          "type": "bool"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        },
++        {
++          "name": "io-status",
++          "type": "222"
++        },
++        {
++          "name": "ready",
++          "type": "bool"
++        },
++        {
++          "name": "status",
++          "type": "220"
++        },
++        {
++          "name": "auto-finalize",
++          "type": "bool"
++        },
++        {
++          "name": "auto-dismiss",
++          "type": "bool"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "20",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "21",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "22",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "snapshot-file",
++          "type": "str"
++        },
++        {
++          "name": "snapshot-node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "225"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "23",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "overlay",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "24",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "image-node-name",
++          "type": "str"
++        },
++        {
++          "name": "backing-file",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "25",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "base-node",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "base",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "top-node",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "top",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "filter-node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "auto-finalize",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "auto-dismiss",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "26",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "226"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "225"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bitmap",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "compress",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "227"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "227"
++        },
++        {
++          "name": "auto-finalize",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "auto-dismiss",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "27",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "226"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bitmap",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "compress",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "227"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "227"
++        },
++        {
++          "name": "auto-finalize",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "auto-dismiss",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[28]",
++      "element-type": "28",
++      "meta-type": "array"
++    },
++    {
++      "name": "28",
++      "members": [
++        {
++          "name": "file",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ro",
++          "type": "bool"
++        },
++        {
++          "name": "drv",
++          "type": "str"
++        },
++        {
++          "name": "backing_file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing_file_depth",
++          "type": "int"
++        },
++        {
++          "name": "encrypted",
++          "type": "bool"
++        },
++        {
++          "name": "encryption_key_missing",
++          "type": "bool"
++        },
++        {
++          "name": "detect_zeroes",
++          "type": "228"
++        },
++        {
++          "name": "bps",
++          "type": "int"
++        },
++        {
++          "name": "bps_rd",
++          "type": "int"
++        },
++        {
++          "name": "bps_wr",
++          "type": "int"
++        },
++        {
++          "name": "iops",
++          "type": "int"
++        },
++        {
++          "name": "iops_rd",
++          "type": "int"
++        },
++        {
++          "name": "iops_wr",
++          "type": "int"
++        },
++        {
++          "name": "image",
++          "type": "229"
++        },
++        {
++          "name": "bps_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cache",
++          "type": "230"
++        },
++        {
++          "name": "write_threshold",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "29",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "replaces",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "226"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "225"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "granularity",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "buf-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "227"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "227"
++        },
++        {
++          "name": "unmap",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "copy-mode",
++          "default": null,
++          "type": "231"
++        },
++        {
++          "name": "auto-finalize",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "auto-dismiss",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "30",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "granularity",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "persistent",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "autoload",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "x-disabled",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "31",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "32",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "dst_name",
++          "type": "str"
++        },
++        {
++          "name": "src_name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "33",
++      "members": [
++        {
++          "name": "sha256",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "34",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "replaces",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "226"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "granularity",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "buf-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "227"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "227"
++        },
++        {
++          "name": "filter-node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "copy-mode",
++          "default": null,
++          "type": "231"
++        },
++        {
++          "name": "auto-finalize",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "auto-dismiss",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "35",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "bps",
++          "type": "int"
++        },
++        {
++          "name": "bps_rd",
++          "type": "int"
++        },
++        {
++          "name": "bps_wr",
++          "type": "int"
++        },
++        {
++          "name": "iops",
++          "type": "int"
++        },
++        {
++          "name": "iops_rd",
++          "type": "int"
++        },
++        {
++          "name": "iops_wr",
++          "type": "int"
++        },
++        {
++          "name": "bps_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "36",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "base",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "base-node",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "on-error",
++          "default": null,
++          "type": "227"
++        },
++        {
++          "name": "auto-finalize",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "auto-dismiss",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "37",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "38",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "39",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "40",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "41",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "42",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "43",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "44",
++      "tag": "driver",
++      "variants": [
++        {
++          "case": "blkdebug",
++          "type": "235"
++        },
++        {
++          "case": "blklogwrites",
++          "type": "236"
++        },
++        {
++          "case": "blkverify",
++          "type": "237"
++        },
++        {
++          "case": "bochs",
++          "type": "238"
++        },
++        {
++          "case": "cloop",
++          "type": "238"
++        },
++        {
++          "case": "copy-on-read",
++          "type": "238"
++        },
++        {
++          "case": "dmg",
++          "type": "238"
++        },
++        {
++          "case": "file",
++          "type": "239"
++        },
++        {
++          "case": "ftp",
++          "type": "240"
++        },
++        {
++          "case": "ftps",
++          "type": "241"
++        },
++        {
++          "case": "gluster",
++          "type": "242"
++        },
++        {
++          "case": "host_cdrom",
++          "type": "239"
++        },
++        {
++          "case": "host_device",
++          "type": "239"
++        },
++        {
++          "case": "http",
++          "type": "243"
++        },
++        {
++          "case": "https",
++          "type": "244"
++        },
++        {
++          "case": "iscsi",
++          "type": "245"
++        },
++        {
++          "case": "luks",
++          "type": "246"
++        },
++        {
++          "case": "nbd",
++          "type": "247"
++        },
++        {
++          "case": "nfs",
++          "type": "248"
++        },
++        {
++          "case": "null-aio",
++          "type": "249"
++        },
++        {
++          "case": "null-co",
++          "type": "249"
++        },
++        {
++          "case": "nvme",
++          "type": "250"
++        },
++        {
++          "case": "parallels",
++          "type": "238"
++        },
++        {
++          "case": "qcow2",
++          "type": "251"
++        },
++        {
++          "case": "qcow",
++          "type": "252"
++        },
++        {
++          "case": "qed",
++          "type": "253"
++        },
++        {
++          "case": "quorum",
++          "type": "254"
++        },
++        {
++          "case": "raw",
++          "type": "255"
++        },
++        {
++          "case": "rbd",
++          "type": "256"
++        },
++        {
++          "case": "replication",
++          "type": "257"
++        },
++        {
++          "case": "sheepdog",
++          "type": "258"
++        },
++        {
++          "case": "ssh",
++          "type": "259"
++        },
++        {
++          "case": "throttle",
++          "type": "260"
++        },
++        {
++          "case": "vdi",
++          "type": "238"
++        },
++        {
++          "case": "vhdx",
++          "type": "238"
++        },
++        {
++          "case": "vmdk",
++          "type": "253"
++        },
++        {
++          "case": "vpc",
++          "type": "238"
++        },
++        {
++          "case": "vvfat",
++          "type": "261"
++        },
++        {
++          "case": "vxhs",
++          "type": "262"
++        }
++      ],
++      "members": [
++        {
++          "name": "driver",
++          "type": "232"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "discard",
++          "default": null,
++          "type": "233"
++        },
++        {
++          "name": "cache",
++          "default": null,
++          "type": "234"
++        },
++        {
++          "name": "read-only",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "auto-read-only",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "force-share",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "detect-zeroes",
++          "default": null,
++          "type": "228"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "45",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "46",
++      "members": [
++        {
++          "name": "job-id",
++          "type": "str"
++        },
++        {
++          "name": "options",
++          "type": "263"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "47",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "48",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "49",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "50",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "51",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "read-only-mode",
++          "default": null,
++          "type": "264"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "52",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "msg",
++          "type": "str"
++        },
++        {
++          "name": "offset",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "fatal",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "53",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "operation",
++          "type": "265"
++        },
++        {
++          "name": "action",
++          "type": "266"
++        },
++        {
++          "name": "nospace",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "reason",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "54",
++      "members": [
++        {
++          "name": "type",
++          "type": "221"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "55",
++      "members": [
++        {
++          "name": "type",
++          "type": "221"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "56",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "operation",
++          "type": "265"
++        },
++        {
++          "name": "action",
++          "type": "266"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "57",
++      "members": [
++        {
++          "name": "type",
++          "type": "221"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "58",
++      "members": [
++        {
++          "name": "type",
++          "type": "221"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "59",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "amount-exceeded",
++          "type": "int"
++        },
++        {
++          "name": "write-threshold",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "60",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "write-threshold",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "61",
++      "members": [
++        {
++          "name": "parent",
++          "type": "str"
++        },
++        {
++          "name": "child",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "62",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "iothread",
++          "type": "267"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[63]",
++      "element-type": "63",
++      "meta-type": "array"
++    },
++    {
++      "name": "63",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "connected",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "64",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "65",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "66",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "vm-state-size",
++          "type": "int"
++        },
++        {
++          "name": "date-sec",
++          "type": "int"
++        },
++        {
++          "name": "date-nsec",
++          "type": "int"
++        },
++        {
++          "name": "vm-clock-sec",
++          "type": "int"
++        },
++        {
++          "name": "vm-clock-nsec",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "67",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "68",
++      "members": [
++        {
++          "name": "addr",
++          "type": "268"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "69",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "writable",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "70",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "269"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "71",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "bitmap",
++          "type": "str"
++        },
++        {
++          "name": "bitmap-export-name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "72",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "tray-open",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "73",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "connected",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "74",
++      "members": [
++        {
++          "name": "reference",
++          "type": "str"
++        },
++        {
++          "name": "sector-num",
++          "type": "int"
++        },
++        {
++          "name": "sectors-count",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "75",
++      "members": [
++        {
++          "name": "type",
++          "type": "270"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "sector-num",
++          "type": "int"
++        },
++        {
++          "name": "sectors-count",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[76]",
++      "element-type": "76",
++      "meta-type": "array"
++    },
++    {
++      "name": "76",
++      "members": [
++        {
++          "name": "label",
++          "type": "str"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "frontend-open",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[77]",
++      "element-type": "77",
++      "meta-type": "array"
++    },
++    {
++      "name": "77",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "78",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "data",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "271"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "79",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "271"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "str",
++      "json-type": "string",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "80",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "backend",
++          "type": "272"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "81",
++      "members": [
++        {
++          "name": "pty",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "82",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "backend",
++          "type": "272"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "83",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "84",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "85",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "open",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "86",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "up",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "87",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "88",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "89",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[90]",
++      "element-type": "90",
++      "meta-type": "array"
++    },
++    {
++      "name": "90",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "promiscuous",
++          "type": "bool"
++        },
++        {
++          "name": "multicast",
++          "type": "273"
++        },
++        {
++          "name": "unicast",
++          "type": "273"
++        },
++        {
++          "name": "vlan",
++          "type": "273"
++        },
++        {
++          "name": "broadcast-allowed",
++          "type": "bool"
++        },
++        {
++          "name": "multicast-overflow",
++          "type": "bool"
++        },
++        {
++          "name": "unicast-overflow",
++          "type": "bool"
++        },
++        {
++          "name": "main-mac",
++          "type": "str"
++        },
++        {
++          "name": "vlan-table",
++          "type": "[int]"
++        },
++        {
++          "name": "unicast-table",
++          "type": "[str]"
++        },
++        {
++          "name": "multicast-table",
++          "type": "[str]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "91",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "92",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "93",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "int"
++        },
++        {
++          "name": "ports",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "94",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[95]",
++      "element-type": "95",
++      "meta-type": "array"
++    },
++    {
++      "name": "95",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "link-up",
++          "type": "bool"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        },
++        {
++          "name": "duplex",
++          "type": "274"
++        },
++        {
++          "name": "autoneg",
++          "type": "275"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "96",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "tbl-id",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[97]",
++      "element-type": "97",
++      "meta-type": "array"
++    },
++    {
++      "name": "97",
++      "members": [
++        {
++          "name": "cookie",
++          "type": "int"
++        },
++        {
++          "name": "hits",
++          "type": "int"
++        },
++        {
++          "name": "key",
++          "type": "276"
++        },
++        {
++          "name": "mask",
++          "type": "277"
++        },
++        {
++          "name": "action",
++          "type": "278"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "98",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[99]",
++      "element-type": "99",
++      "meta-type": "array"
++    },
++    {
++      "name": "99",
++      "members": [
++        {
++          "name": "id",
++          "type": "int"
++        },
++        {
++          "name": "type",
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "index",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "out-pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "set-vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "pop-vlan",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group-ids",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "set-eth-src",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "set-eth-dst",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ttl-check",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[100]",
++      "element-type": "100",
++      "meta-type": "array"
++    },
++    {
++      "name": "100",
++      "meta-type": "enum",
++      "values": [
++        "tpm-tis",
++        "tpm-crb"
++      ]
++    },
++    {
++      "name": "[101]",
++      "element-type": "101",
++      "meta-type": "array"
++    },
++    {
++      "name": "101",
++      "meta-type": "enum",
++      "values": [
++        "passthrough",
++        "emulator"
++      ]
++    },
++    {
++      "name": "[102]",
++      "element-type": "102",
++      "meta-type": "array"
++    },
++    {
++      "name": "102",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "model",
++          "type": "100"
++        },
++        {
++          "name": "options",
++          "type": "279"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "103",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "password",
++          "type": "str"
++        },
++        {
++          "name": "connected",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "104",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "time",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "105",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "head",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "110",
++      "members": [
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "host",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "default": null,
++          "type": "284"
++        },
++        {
++          "name": "service",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "auth",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "clients",
++          "default": null,
++          "type": "[285]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[111]",
++      "element-type": "111",
++      "meta-type": "array"
++    },
++    {
++      "name": "111",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "type": "[286]"
++        },
++        {
++          "name": "clients",
++          "type": "[285]"
++        },
++        {
++          "name": "auth",
++          "type": "287"
++        },
++        {
++          "name": "vencrypt",
++          "default": null,
++          "type": "288"
++        },
++        {
++          "name": "display",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "112",
++      "members": [
++        {
++          "name": "password",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "113",
++      "members": [
++        {
++          "name": "server",
++          "type": "289"
++        },
++        {
++          "name": "client",
++          "type": "290"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "114",
++      "members": [
++        {
++          "name": "server",
++          "type": "289"
++        },
++        {
++          "name": "client",
++          "type": "285"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "115",
++      "members": [
++        {
++          "name": "server",
++          "type": "289"
++        },
++        {
++          "name": "client",
++          "type": "285"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[116]",
++      "element-type": "116",
++      "meta-type": "array"
++    },
++    {
++      "name": "116",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "index",
++          "type": "int"
++        },
++        {
++          "name": "current",
++          "type": "bool"
++        },
++        {
++          "name": "absolute",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "117",
++      "members": [
++        {
++          "name": "keys",
++          "type": "[291]"
++        },
++        {
++          "name": "hold-time",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "118",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "head",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "events",
++          "type": "[292]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "119",
++      "members": [
++        {
++          "name": "status",
++          "default": null,
++          "type": "293"
++        },
++        {
++          "name": "ram",
++          "default": null,
++          "type": "294"
++        },
++        {
++          "name": "disk",
++          "default": null,
++          "type": "294"
++        },
++        {
++          "name": "xbzrle-cache",
++          "default": null,
++          "type": "295"
++        },
++        {
++          "name": "total-time",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "expected-downtime",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "downtime",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "setup-time",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-percentage",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "error-desc",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "postcopy-blocktime",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "postcopy-vcpu-blocktime",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "compression",
++          "default": null,
++          "type": "296"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "120",
++      "members": [
++        {
++          "name": "capabilities",
++          "type": "[121]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[121]",
++      "element-type": "121",
++      "meta-type": "array"
++    },
++    {
++      "name": "121",
++      "members": [
++        {
++          "name": "capability",
++          "type": "297"
++        },
++        {
++          "name": "state",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "122",
++      "members": [
++        {
++          "name": "compress-level",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "compress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "compress-wait-thread",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "decompress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-initial",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-increment",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "267"
++        },
++        {
++          "name": "tls-hostname",
++          "default": null,
++          "type": "267"
++        },
++        {
++          "name": "max-bandwidth",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "downtime-limit",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-checkpoint-delay",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "block-incremental",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "x-multifd-channels",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-multifd-page-count",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "xbzrle-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-postcopy-bandwidth",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-cpu-throttle",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "123",
++      "members": [
++        {
++          "name": "compress-level",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "compress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "compress-wait-thread",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "decompress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-initial",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-increment",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "tls-hostname",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "max-bandwidth",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "downtime-limit",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-checkpoint-delay",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "block-incremental",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "x-multifd-channels",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-multifd-page-count",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "xbzrle-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-postcopy-bandwidth",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-cpu-throttle",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "124",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "hostname",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-port",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cert-subject",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "125",
++      "members": [
++        {
++          "name": "status",
++          "type": "293"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "126",
++      "members": [
++        {
++          "name": "pass",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "127",
++      "members": [
++        {
++          "name": "mode",
++          "type": "298"
++        },
++        {
++          "name": "reason",
++          "type": "299"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "128",
++      "members": [
++        {
++          "name": "state",
++          "type": "293"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "129",
++      "members": [
++        {
++          "name": "value",
++          "type": "number"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "130",
++      "members": [
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "131",
++      "members": [
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "int",
++      "json-type": "int",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "132",
++      "members": [
++        {
++          "name": "uri",
++          "type": "str"
++        },
++        {
++          "name": "blk",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "inc",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "detach",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "resume",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "133",
++      "members": [
++        {
++          "name": "uri",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "134",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "live",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "135",
++      "members": [
++        {
++          "name": "enable",
++          "type": "bool"
++        },
++        {
++          "name": "primary",
++          "type": "bool"
++        },
++        {
++          "name": "failover",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "136",
++      "members": [
++        {
++          "name": "error",
++          "type": "bool"
++        },
++        {
++          "name": "desc",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "137",
++      "members": [
++        {
++          "name": "mode",
++          "type": "298"
++        },
++        {
++          "name": "reason",
++          "type": "299"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "138",
++      "members": [
++        {
++          "name": "uri",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "139",
++      "members": [
++        {
++          "name": "actions",
++          "type": "[300]"
++        },
++        {
++          "name": "properties",
++          "default": null,
++          "type": "301"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "140",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "vcpu",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[141]",
++      "element-type": "141",
++      "meta-type": "array"
++    },
++    {
++      "name": "141",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "state",
++          "type": "302"
++        },
++        {
++          "name": "vcpu",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "142",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "enable",
++          "type": "bool"
++        },
++        {
++          "name": "ignore-unavailable",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "vcpu",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[143]",
++      "element-type": "143",
++      "meta-type": "array"
++    },
++    {
++      "name": "143",
++      "tag": "meta-type",
++      "variants": [
++        {
++          "case": "builtin",
++          "type": "304"
++        },
++        {
++          "case": "enum",
++          "type": "305"
++        },
++        {
++          "case": "array",
++          "type": "306"
++        },
++        {
++          "case": "object",
++          "type": "307"
++        },
++        {
++          "case": "alternate",
++          "type": "308"
++        },
++        {
++          "case": "command",
++          "type": "309"
++        },
++        {
++          "case": "event",
++          "type": "310"
++        }
++      ],
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "meta-type",
++          "type": "303"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "144",
++      "members": [
++        {
++          "name": "enable",
++          "default": null,
++          "type": "[311]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "145",
++      "members": [
++        {
++          "name": "qemu",
++          "type": "312"
++        },
++        {
++          "name": "package",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[146]",
++      "element-type": "146",
++      "meta-type": "array"
++    },
++    {
++      "name": "146",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "147",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "fdname",
++          "type": "str"
++        },
++        {
++          "name": "skipauth",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "tls",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "148",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "149",
++      "members": [
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "present",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "150",
++      "members": [
++        {
++          "name": "UUID",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[151]",
++      "element-type": "151",
++      "meta-type": "array"
++    },
++    {
++      "name": "151",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[152]",
++      "element-type": "152",
++      "meta-type": "array"
++    },
++    {
++      "name": "152",
++      "tag": "arch",
++      "variants": [
++        {
++          "case": "x86",
++          "type": "315"
++        },
++        {
++          "case": "sparc",
++          "type": "316"
++        },
++        {
++          "case": "ppc",
++          "type": "317"
++        },
++        {
++          "case": "mips",
++          "type": "318"
++        },
++        {
++          "case": "tricore",
++          "type": "319"
++        },
++        {
++          "case": "s390",
++          "type": "320"
++        },
++        {
++          "case": "riscv",
++          "type": "321"
++        },
++        {
++          "case": "other",
++          "type": "0"
++        }
++      ],
++      "members": [
++        {
++          "name": "CPU",
++          "type": "int"
++        },
++        {
++          "name": "current",
++          "type": "bool"
++        },
++        {
++          "name": "halted",
++          "type": "bool"
++        },
++        {
++          "name": "qom_path",
++          "type": "str"
++        },
++        {
++          "name": "thread_id",
++          "type": "int"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "313"
++        },
++        {
++          "name": "arch",
++          "type": "314"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[153]",
++      "element-type": "153",
++      "meta-type": "array"
++    },
++    {
++      "name": "153",
++      "tag": "target",
++      "variants": [
++        {
++          "case": "s390x",
++          "type": "320"
++        },
++        {
++          "case": "aarch64",
++          "type": "0"
++        },
++        {
++          "case": "alpha",
++          "type": "0"
++        },
++        {
++          "case": "arm",
++          "type": "0"
++        },
++        {
++          "case": "cris",
++          "type": "0"
++        },
++        {
++          "case": "hppa",
++          "type": "0"
++        },
++        {
++          "case": "i386",
++          "type": "0"
++        },
++        {
++          "case": "lm32",
++          "type": "0"
++        },
++        {
++          "case": "m68k",
++          "type": "0"
++        },
++        {
++          "case": "microblaze",
++          "type": "0"
++        },
++        {
++          "case": "microblazeel",
++          "type": "0"
++        },
++        {
++          "case": "mips",
++          "type": "0"
++        },
++        {
++          "case": "mips64",
++          "type": "0"
++        },
++        {
++          "case": "mips64el",
++          "type": "0"
++        },
++        {
++          "case": "mipsel",
++          "type": "0"
++        },
++        {
++          "case": "moxie",
++          "type": "0"
++        },
++        {
++          "case": "nios2",
++          "type": "0"
++        },
++        {
++          "case": "or1k",
++          "type": "0"
++        },
++        {
++          "case": "ppc",
++          "type": "0"
++        },
++        {
++          "case": "ppc64",
++          "type": "0"
++        },
++        {
++          "case": "riscv32",
++          "type": "0"
++        },
++        {
++          "case": "riscv64",
++          "type": "0"
++        },
++        {
++          "case": "sh4",
++          "type": "0"
++        },
++        {
++          "case": "sh4eb",
++          "type": "0"
++        },
++        {
++          "case": "sparc",
++          "type": "0"
++        },
++        {
++          "case": "sparc64",
++          "type": "0"
++        },
++        {
++          "case": "tricore",
++          "type": "0"
++        },
++        {
++          "case": "unicore32",
++          "type": "0"
++        },
++        {
++          "case": "x86_64",
++          "type": "0"
++        },
++        {
++          "case": "xtensa",
++          "type": "0"
++        },
++        {
++          "case": "xtensaeb",
++          "type": "0"
++        }
++      ],
++      "members": [
++        {
++          "name": "cpu-index",
++          "type": "int"
++        },
++        {
++          "name": "qom-path",
++          "type": "str"
++        },
++        {
++          "name": "thread-id",
++          "type": "int"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "313"
++        },
++        {
++          "name": "arch",
++          "type": "314"
++        },
++        {
++          "name": "target",
++          "type": "322"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[154]",
++      "element-type": "154",
++      "meta-type": "array"
++    },
++    {
++      "name": "154",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "thread-id",
++          "type": "int"
++        },
++        {
++          "name": "poll-max-ns",
++          "type": "int"
++        },
++        {
++          "name": "poll-grow",
++          "type": "int"
++        },
++        {
++          "name": "poll-shrink",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "155",
++      "members": [
++        {
++          "name": "actual",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "156",
++      "members": [
++        {
++          "name": "actual",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[157]",
++      "element-type": "157",
++      "meta-type": "array"
++    },
++    {
++      "name": "157",
++      "members": [
++        {
++          "name": "bus",
++          "type": "int"
++        },
++        {
++          "name": "devices",
++          "type": "[323]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "158",
++      "members": [
++        {
++          "name": "id",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "159",
++      "members": [
++        {
++          "name": "val",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "cpu-index",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "160",
++      "members": [
++        {
++          "name": "val",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "161",
++      "members": [
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "162",
++      "members": [
++        {
++          "name": "command-line",
++          "type": "str"
++        },
++        {
++          "name": "cpu-index",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "163",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[164]",
++      "element-type": "164",
++      "meta-type": "array"
++    },
++    {
++      "name": "164",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "description",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "165",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "property",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "any",
++      "json-type": "value",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "166",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "property",
++          "type": "str"
++        },
++        {
++          "name": "value",
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "167",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "arg",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "168",
++      "members": [
++        {
++          "name": "implements",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "abstract",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[169]",
++      "element-type": "169",
++      "meta-type": "array"
++    },
++    {
++      "name": "169",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "abstract",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "parent",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "170",
++      "members": [
++        {
++          "name": "typename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "171",
++      "members": [
++        {
++          "name": "typename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "172",
++      "members": [
++        {
++          "name": "enable",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "173",
++      "members": [
++        {
++          "name": "driver",
++          "type": "str"
++        },
++        {
++          "name": "bus",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "174",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "175",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "176",
++      "members": [
++        {
++          "name": "paging",
++          "type": "bool"
++        },
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "detach",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "begin",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "324"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "177",
++      "members": [
++        {
++          "name": "status",
++          "type": "325"
++        },
++        {
++          "name": "completed",
++          "type": "int"
++        },
++        {
++          "name": "total",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "178",
++      "members": [
++        {
++          "name": "result",
++          "type": "177"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "179",
++      "members": [
++        {
++          "name": "formats",
++          "type": "[324]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "180",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "181",
++      "members": [
++        {
++          "name": "qom-type",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "182",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "183",
++      "members": [
++        {
++          "name": "fdname",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "184",
++      "members": [
++        {
++          "name": "fdname",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[185]",
++      "element-type": "185",
++      "meta-type": "array"
++    },
++    {
++      "name": "185",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "alias",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "is-default",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "cpu-max",
++          "type": "int"
++        },
++        {
++          "name": "hotpluggable-cpus",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "186",
++      "members": [
++        {
++          "name": "base-memory",
++          "type": "int"
++        },
++        {
++          "name": "plugged-memory",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[187]",
++      "element-type": "187",
++      "meta-type": "array"
++    },
++    {
++      "name": "187",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "migration-safe",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "static",
++          "type": "bool"
++        },
++        {
++          "name": "unavailable-features",
++          "default": null,
++          "type": "[str]"
++        },
++        {
++          "name": "typename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "188",
++      "members": [
++        {
++          "name": "type",
++          "type": "326"
++        },
++        {
++          "name": "model",
++          "type": "327"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "189",
++      "members": [
++        {
++          "name": "model",
++          "type": "327"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "190",
++      "members": [
++        {
++          "name": "modela",
++          "type": "327"
++        },
++        {
++          "name": "modelb",
++          "type": "327"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "191",
++      "members": [
++        {
++          "name": "result",
++          "type": "328"
++        },
++        {
++          "name": "responsible-properties",
++          "type": "[str]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "192",
++      "members": [
++        {
++          "name": "modela",
++          "type": "327"
++        },
++        {
++          "name": "modelb",
++          "type": "327"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "193",
++      "members": [
++        {
++          "name": "model",
++          "type": "327"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "194",
++      "members": [
++        {
++          "name": "fdset-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "opaque",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "195",
++      "members": [
++        {
++          "name": "fdset-id",
++          "type": "int"
++        },
++        {
++          "name": "fd",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "196",
++      "members": [
++        {
++          "name": "fdset-id",
++          "type": "int"
++        },
++        {
++          "name": "fd",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[197]",
++      "element-type": "197",
++      "meta-type": "array"
++    },
++    {
++      "name": "197",
++      "members": [
++        {
++          "name": "fdset-id",
++          "type": "int"
++        },
++        {
++          "name": "fds",
++          "type": "[329]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "198",
++      "members": [
++        {
++          "name": "arch",
++          "type": "322"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "199",
++      "members": [
++        {
++          "name": "option",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[200]",
++      "element-type": "200",
++      "meta-type": "array"
++    },
++    {
++      "name": "200",
++      "members": [
++        {
++          "name": "option",
++          "type": "str"
++        },
++        {
++          "name": "parameters",
++          "type": "[330]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[201]",
++      "element-type": "201",
++      "meta-type": "array"
++    },
++    {
++      "name": "201",
++      "members": [
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "merge",
++          "type": "bool"
++        },
++        {
++          "name": "dump",
++          "type": "bool"
++        },
++        {
++          "name": "prealloc",
++          "type": "bool"
++        },
++        {
++          "name": "host-nodes",
++          "type": "[int]"
++        },
++        {
++          "name": "policy",
++          "type": "331"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[202]",
++      "element-type": "202",
++      "meta-type": "array"
++    },
++    {
++      "name": "202",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "dimm",
++          "type": "333"
++        },
++        {
++          "case": "nvdimm",
++          "type": "333"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "332"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "203",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "msg",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[204]",
++      "element-type": "204",
++      "meta-type": "array"
++    },
++    {
++      "name": "204",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "slot",
++          "type": "str"
++        },
++        {
++          "name": "slot-type",
++          "type": "334"
++        },
++        {
++          "name": "source",
++          "type": "int"
++        },
++        {
++          "name": "status",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "205",
++      "members": [
++        {
++          "name": "info",
++          "type": "204"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "206",
++      "members": [
++        {
++          "name": "offset",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "207",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[208]",
++      "element-type": "208",
++      "meta-type": "array"
++    },
++    {
++      "name": "208",
++      "members": [
++        {
++          "name": "version",
++          "type": "int"
++        },
++        {
++          "name": "emulated",
++          "type": "bool"
++        },
++        {
++          "name": "kernel",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[209]",
++      "element-type": "209",
++      "meta-type": "array"
++    },
++    {
++      "name": "209",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "vcpus-count",
++          "type": "int"
++        },
++        {
++          "name": "props",
++          "type": "313"
++        },
++        {
++          "name": "qom-path",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "210",
++      "members": [
++        {
++          "name": "guid",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "211",
++      "members": [
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "api-major",
++          "type": "int"
++        },
++        {
++          "name": "api-minor",
++          "type": "int"
++        },
++        {
++          "name": "build-id",
++          "type": "int"
++        },
++        {
++          "name": "policy",
++          "type": "int"
++        },
++        {
++          "name": "state",
++          "type": "335"
++        },
++        {
++          "name": "handle",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "212",
++      "members": [
++        {
++          "name": "data",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "213",
++      "members": [
++        {
++          "name": "pdh",
++          "type": "str"
++        },
++        {
++          "name": "cert-chain",
++          "type": "str"
++        },
++        {
++          "name": "cbitpos",
++          "type": "int"
++        },
++        {
++          "name": "reduced-phys-bits",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "214",
++      "members": [
++        {
++          "name": "id",
++          "type": "any"
++        },
++        {
++          "name": "reason",
++          "type": "336"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "215",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "node",
++          "type": "338"
++        },
++        {
++          "case": "dist",
++          "type": "339"
++        },
++        {
++          "case": "cpu",
++          "type": "340"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "337"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "bool",
++      "json-type": "boolean",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "216",
++      "meta-type": "enum",
++      "values": [
++        "debug",
++        "inmigrate",
++        "internal-error",
++        "io-error",
++        "paused",
++        "postmigrate",
++        "prelaunch",
++        "finish-migrate",
++        "restore-vm",
++        "running",
++        "save-vm",
++        "shutdown",
++        "suspended",
++        "watchdog",
++        "guest-panicked",
++        "colo",
++        "preconfig"
++      ]
++    },
++    {
++      "name": "217",
++      "meta-type": "enum",
++      "values": [
++        "reset",
++        "shutdown",
++        "poweroff",
++        "pause",
++        "debug",
++        "none",
++        "inject-nmi"
++      ]
++    },
++    {
++      "name": "218",
++      "meta-type": "enum",
++      "values": [
++        "pause",
++        "poweroff"
++      ]
++    },
++    {
++      "name": "219",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "hyper-v",
++          "type": "342"
++        },
++        {
++          "case": "s390",
++          "type": "343"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "341"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "220",
++      "meta-type": "enum",
++      "values": [
++        "undefined",
++        "created",
++        "running",
++        "paused",
++        "ready",
++        "standby",
++        "waiting",
++        "pending",
++        "aborting",
++        "concluded",
++        "null"
++      ]
++    },
++    {
++      "name": "221",
++      "meta-type": "enum",
++      "values": [
++        "commit",
++        "stream",
++        "mirror",
++        "backup",
++        "create"
++      ]
++    },
++    {
++      "name": "[int]",
++      "element-type": "int",
++      "meta-type": "array"
++    },
++    {
++      "name": "222",
++      "meta-type": "enum",
++      "values": [
++        "ok",
++        "failed",
++        "nospace"
++      ]
++    },
++    {
++      "name": "[223]",
++      "element-type": "223",
++      "meta-type": "array"
++    },
++    {
++      "name": "223",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "count",
++          "type": "int"
++        },
++        {
++          "name": "granularity",
++          "type": "int"
++        },
++        {
++          "name": "status",
++          "type": "344"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "224",
++      "members": [
++        {
++          "name": "rd_bytes",
++          "type": "int"
++        },
++        {
++          "name": "wr_bytes",
++          "type": "int"
++        },
++        {
++          "name": "rd_operations",
++          "type": "int"
++        },
++        {
++          "name": "wr_operations",
++          "type": "int"
++        },
++        {
++          "name": "flush_operations",
++          "type": "int"
++        },
++        {
++          "name": "flush_total_time_ns",
++          "type": "int"
++        },
++        {
++          "name": "wr_total_time_ns",
++          "type": "int"
++        },
++        {
++          "name": "rd_total_time_ns",
++          "type": "int"
++        },
++        {
++          "name": "wr_highest_offset",
++          "type": "int"
++        },
++        {
++          "name": "rd_merged",
++          "type": "int"
++        },
++        {
++          "name": "wr_merged",
++          "type": "int"
++        },
++        {
++          "name": "idle_time_ns",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "failed_rd_operations",
++          "type": "int"
++        },
++        {
++          "name": "failed_wr_operations",
++          "type": "int"
++        },
++        {
++          "name": "failed_flush_operations",
++          "type": "int"
++        },
++        {
++          "name": "invalid_rd_operations",
++          "type": "int"
++        },
++        {
++          "name": "invalid_wr_operations",
++          "type": "int"
++        },
++        {
++          "name": "invalid_flush_operations",
++          "type": "int"
++        },
++        {
++          "name": "account_invalid",
++          "type": "bool"
++        },
++        {
++          "name": "account_failed",
++          "type": "bool"
++        },
++        {
++          "name": "timed_stats",
++          "type": "[345]"
++        },
++        {
++          "name": "x_rd_latency_histogram",
++          "default": null,
++          "type": "346"
++        },
++        {
++          "name": "x_wr_latency_histogram",
++          "default": null,
++          "type": "346"
++        },
++        {
++          "name": "x_flush_latency_histogram",
++          "default": null,
++          "type": "346"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "225",
++      "meta-type": "enum",
++      "values": [
++        "existing",
++        "absolute-paths"
++      ]
++    },
++    {
++      "name": "226",
++      "meta-type": "enum",
++      "values": [
++        "top",
++        "full",
++        "none",
++        "incremental"
++      ]
++    },
++    {
++      "name": "227",
++      "meta-type": "enum",
++      "values": [
++        "report",
++        "ignore",
++        "enospc",
++        "stop",
++        "auto"
++      ]
++    },
++    {
++      "name": "228",
++      "meta-type": "enum",
++      "values": [
++        "off",
++        "on",
++        "unmap"
++      ]
++    },
++    {
++      "name": "229",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "type": "str"
++        },
++        {
++          "name": "dirty-flag",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "actual-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "virtual-size",
++          "type": "int"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "encrypted",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "compressed",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "backing-filename",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "full-backing-filename",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-filename-format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "snapshots",
++          "default": null,
++          "type": "[66]"
++        },
++        {
++          "name": "backing-image",
++          "default": null,
++          "type": "229"
++        },
++        {
++          "name": "format-specific",
++          "default": null,
++          "type": "347"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "230",
++      "members": [
++        {
++          "name": "writeback",
++          "type": "bool"
++        },
++        {
++          "name": "direct",
++          "type": "bool"
++        },
++        {
++          "name": "no-flush",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "231",
++      "meta-type": "enum",
++      "values": [
++        "background",
++        "write-blocking"
++      ]
++    },
++    {
++      "name": "232",
++      "meta-type": "enum",
++      "values": [
++        "blkdebug",
++        "blklogwrites",
++        "blkverify",
++        "bochs",
++        "cloop",
++        "copy-on-read",
++        "dmg",
++        "file",
++        "ftp",
++        "ftps",
++        "gluster",
++        "host_cdrom",
++        "host_device",
++        "http",
++        "https",
++        "iscsi",
++        "luks",
++        "nbd",
++        "nfs",
++        "null-aio",
++        "null-co",
++        "nvme",
++        "parallels",
++        "qcow",
++        "qcow2",
++        "qed",
++        "quorum",
++        "raw",
++        "rbd",
++        "replication",
++        "sheepdog",
++        "ssh",
++        "throttle",
++        "vdi",
++        "vhdx",
++        "vmdk",
++        "vpc",
++        "vvfat",
++        "vxhs"
++      ]
++    },
++    {
++      "name": "233",
++      "meta-type": "enum",
++      "values": [
++        "ignore",
++        "unmap"
++      ]
++    },
++    {
++      "name": "234",
++      "members": [
++        {
++          "name": "direct",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "no-flush",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "235",
++      "members": [
++        {
++          "name": "image",
++          "type": "348"
++        },
++        {
++          "name": "config",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "align",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-transfer",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "opt-write-zero",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-write-zero",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "opt-discard",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-discard",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "inject-error",
++          "default": null,
++          "type": "[349]"
++        },
++        {
++          "name": "set-state",
++          "default": null,
++          "type": "[350]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "236",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "log",
++          "type": "348"
++        },
++        {
++          "name": "log-sector-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "log-append",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "log-super-update-interval",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "237",
++      "members": [
++        {
++          "name": "test",
++          "type": "348"
++        },
++        {
++          "name": "raw",
++          "type": "348"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "238",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "239",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "pr-manager",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "locking",
++          "default": null,
++          "type": "351"
++        },
++        {
++          "name": "aio",
++          "default": null,
++          "type": "352"
++        },
++        {
++          "name": "x-check-cache-dropped",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "240",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "241",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sslverify",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "242",
++      "members": [
++        {
++          "name": "volume",
++          "type": "str"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "type": "[353]"
++        },
++        {
++          "name": "debug",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "243",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cookie",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cookie-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "244",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cookie",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sslverify",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "cookie-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "245",
++      "members": [
++        {
++          "name": "transport",
++          "type": "354"
++        },
++        {
++          "name": "portal",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "lun",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "initiator-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "header-digest",
++          "default": null,
++          "type": "355"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "246",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "247",
++      "members": [
++        {
++          "name": "server",
++          "type": "353"
++        },
++        {
++          "name": "export",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "x-dirty-bitmap",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "248",
++      "members": [
++        {
++          "name": "server",
++          "type": "356"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tcp-syn-count",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "readahead-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "page-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "debug",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "249",
++      "members": [
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "latency-ns",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "250",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "namespace",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "251",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "357"
++        },
++        {
++          "name": "lazy-refcounts",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "pass-discard-request",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "pass-discard-snapshot",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "pass-discard-other",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "overlap-check",
++          "default": null,
++          "type": "358"
++        },
++        {
++          "name": "cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "l2-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "l2-cache-entry-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "refcount-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cache-clean-interval",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "359"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "252",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "357"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "360"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "253",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "357"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "254",
++      "members": [
++        {
++          "name": "blkverify",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "children",
++          "type": "[348]"
++        },
++        {
++          "name": "vote-threshold",
++          "type": "int"
++        },
++        {
++          "name": "rewrite-corrupted",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "read-pattern",
++          "default": null,
++          "type": "361"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "255",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "offset",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "256",
++      "members": [
++        {
++          "name": "pool",
++          "type": "str"
++        },
++        {
++          "name": "image",
++          "type": "str"
++        },
++        {
++          "name": "conf",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "snapshot",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "auth-client-required",
++          "default": null,
++          "type": "[362]"
++        },
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "default": null,
++          "type": "[363]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "257",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "mode",
++          "type": "364"
++        },
++        {
++          "name": "top-id",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "258",
++      "members": [
++        {
++          "name": "server",
++          "type": "353"
++        },
++        {
++          "name": "vdi",
++          "type": "str"
++        },
++        {
++          "name": "snap-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tag",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "259",
++      "members": [
++        {
++          "name": "server",
++          "type": "365"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "host-key-check",
++          "default": null,
++          "type": "366"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "260",
++      "members": [
++        {
++          "name": "throttle-group",
++          "type": "str"
++        },
++        {
++          "name": "file",
++          "type": "348"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "261",
++      "members": [
++        {
++          "name": "dir",
++          "type": "str"
++        },
++        {
++          "name": "fat-type",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "floppy",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "label",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "rw",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "262",
++      "members": [
++        {
++          "name": "vdisk-id",
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "type": "363"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "263",
++      "tag": "driver",
++      "variants": [
++        {
++          "case": "file",
++          "type": "367"
++        },
++        {
++          "case": "gluster",
++          "type": "368"
++        },
++        {
++          "case": "luks",
++          "type": "369"
++        },
++        {
++          "case": "nfs",
++          "type": "370"
++        },
++        {
++          "case": "parallels",
++          "type": "371"
++        },
++        {
++          "case": "qcow",
++          "type": "372"
++        },
++        {
++          "case": "qcow2",
++          "type": "373"
++        },
++        {
++          "case": "qed",
++          "type": "374"
++        },
++        {
++          "case": "rbd",
++          "type": "375"
++        },
++        {
++          "case": "sheepdog",
++          "type": "376"
++        },
++        {
++          "case": "ssh",
++          "type": "377"
++        },
++        {
++          "case": "vdi",
++          "type": "378"
++        },
++        {
++          "case": "vhdx",
++          "type": "379"
++        },
++        {
++          "case": "vpc",
++          "type": "380"
++        },
++        {
++          "case": "blkdebug",
++          "type": "0"
++        },
++        {
++          "case": "blklogwrites",
++          "type": "0"
++        },
++        {
++          "case": "blkverify",
++          "type": "0"
++        },
++        {
++          "case": "bochs",
++          "type": "0"
++        },
++        {
++          "case": "cloop",
++          "type": "0"
++        },
++        {
++          "case": "copy-on-read",
++          "type": "0"
++        },
++        {
++          "case": "dmg",
++          "type": "0"
++        },
++        {
++          "case": "ftp",
++          "type": "0"
++        },
++        {
++          "case": "ftps",
++          "type": "0"
++        },
++        {
++          "case": "host_cdrom",
++          "type": "0"
++        },
++        {
++          "case": "host_device",
++          "type": "0"
++        },
++        {
++          "case": "http",
++          "type": "0"
++        },
++        {
++          "case": "https",
++          "type": "0"
++        },
++        {
++          "case": "iscsi",
++          "type": "0"
++        },
++        {
++          "case": "nbd",
++          "type": "0"
++        },
++        {
++          "case": "null-aio",
++          "type": "0"
++        },
++        {
++          "case": "null-co",
++          "type": "0"
++        },
++        {
++          "case": "nvme",
++          "type": "0"
++        },
++        {
++          "case": "quorum",
++          "type": "0"
++        },
++        {
++          "case": "raw",
++          "type": "0"
++        },
++        {
++          "case": "replication",
++          "type": "0"
++        },
++        {
++          "case": "throttle",
++          "type": "0"
++        },
++        {
++          "case": "vmdk",
++          "type": "0"
++        },
++        {
++          "case": "vvfat",
++          "type": "0"
++        },
++        {
++          "case": "vxhs",
++          "type": "0"
++        }
++      ],
++      "members": [
++        {
++          "name": "driver",
++          "type": "232"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "264",
++      "meta-type": "enum",
++      "values": [
++        "retain",
++        "read-only",
++        "read-write"
++      ]
++    },
++    {
++      "name": "265",
++      "meta-type": "enum",
++      "values": [
++        "read",
++        "write"
++      ]
++    },
++    {
++      "name": "266",
++      "meta-type": "enum",
++      "values": [
++        "ignore",
++        "report",
++        "stop"
++      ]
++    },
++    {
++      "name": "267",
++      "members": [
++        {
++          "type": "str"
++        },
++        {
++          "type": "null"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "268",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "inet",
++          "type": "382"
++        },
++        {
++          "case": "unix",
++          "type": "383"
++        },
++        {
++          "case": "vsock",
++          "type": "384"
++        },
++        {
++          "case": "fd",
++          "type": "385"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "381"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "269",
++      "meta-type": "enum",
++      "values": [
++        "safe",
++        "hard"
++      ]
++    },
++    {
++      "name": "270",
++      "meta-type": "enum",
++      "values": [
++        "read",
++        "write",
++        "flush"
++      ]
++    },
++    {
++      "name": "271",
++      "meta-type": "enum",
++      "values": [
++        "utf8",
++        "base64"
++      ]
++    },
++    {
++      "name": "272",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "file",
++          "type": "387"
++        },
++        {
++          "case": "serial",
++          "type": "388"
++        },
++        {
++          "case": "parallel",
++          "type": "388"
++        },
++        {
++          "case": "pipe",
++          "type": "388"
++        },
++        {
++          "case": "socket",
++          "type": "389"
++        },
++        {
++          "case": "udp",
++          "type": "390"
++        },
++        {
++          "case": "pty",
++          "type": "391"
++        },
++        {
++          "case": "null",
++          "type": "391"
++        },
++        {
++          "case": "mux",
++          "type": "392"
++        },
++        {
++          "case": "msmouse",
++          "type": "391"
++        },
++        {
++          "case": "wctablet",
++          "type": "391"
++        },
++        {
++          "case": "braille",
++          "type": "391"
++        },
++        {
++          "case": "testdev",
++          "type": "391"
++        },
++        {
++          "case": "stdio",
++          "type": "393"
++        },
++        {
++          "case": "console",
++          "type": "391"
++        },
++        {
++          "case": "spicevmc",
++          "type": "394"
++        },
++        {
++          "case": "spiceport",
++          "type": "395"
++        },
++        {
++          "case": "vc",
++          "type": "396"
++        },
++        {
++          "case": "ringbuf",
++          "type": "397"
++        },
++        {
++          "case": "memory",
++          "type": "397"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "386"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "273",
++      "meta-type": "enum",
++      "values": [
++        "normal",
++        "none",
++        "all"
++      ]
++    },
++    {
++      "name": "[str]",
++      "element-type": "str",
++      "meta-type": "array"
++    },
++    {
++      "name": "274",
++      "meta-type": "enum",
++      "values": [
++        "half",
++        "full"
++      ]
++    },
++    {
++      "name": "275",
++      "meta-type": "enum",
++      "values": [
++        "off",
++        "on"
++      ]
++    },
++    {
++      "name": "276",
++      "members": [
++        {
++          "name": "priority",
++          "type": "int"
++        },
++        {
++          "name": "tbl-id",
++          "type": "int"
++        },
++        {
++          "name": "in-pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tunnel-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "eth-type",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "eth-src",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "eth-dst",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ip-proto",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ip-tos",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ip-dst",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "277",
++      "members": [
++        {
++          "name": "in-pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tunnel-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "eth-src",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "eth-dst",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ip-proto",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ip-tos",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "278",
++      "members": [
++        {
++          "name": "goto-tbl",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tunnel-lport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "new-vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "out-pport",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "279",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "passthrough",
++          "type": "399"
++        },
++        {
++          "case": "emulator",
++          "type": "400"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "398"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "284",
++      "meta-type": "enum",
++      "values": [
++        "ipv4",
++        "ipv6",
++        "unix",
++        "vsock",
++        "unknown"
++      ]
++    },
++    {
++      "name": "[285]",
++      "element-type": "285",
++      "meta-type": "array"
++    },
++    {
++      "name": "285",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "284"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        },
++        {
++          "name": "x509_dname",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sasl_username",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[286]",
++      "element-type": "286",
++      "meta-type": "array"
++    },
++    {
++      "name": "286",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "284"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        },
++        {
++          "name": "auth",
++          "type": "287"
++        },
++        {
++          "name": "vencrypt",
++          "default": null,
++          "type": "288"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "287",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "vnc",
++        "ra2",
++        "ra2ne",
++        "tight",
++        "ultra",
++        "tls",
++        "vencrypt",
++        "sasl"
++      ]
++    },
++    {
++      "name": "288",
++      "meta-type": "enum",
++      "values": [
++        "plain",
++        "tls-none",
++        "x509-none",
++        "tls-vnc",
++        "x509-vnc",
++        "tls-plain",
++        "x509-plain",
++        "tls-sasl",
++        "x509-sasl"
++      ]
++    },
++    {
++      "name": "289",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "284"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        },
++        {
++          "name": "auth",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "290",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "284"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[291]",
++      "element-type": "291",
++      "meta-type": "array"
++    },
++    {
++      "name": "291",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "number",
++          "type": "402"
++        },
++        {
++          "case": "qcode",
++          "type": "403"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "401"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[292]",
++      "element-type": "292",
++      "meta-type": "array"
++    },
++    {
++      "name": "292",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "key",
++          "type": "405"
++        },
++        {
++          "case": "btn",
++          "type": "406"
++        },
++        {
++          "case": "rel",
++          "type": "407"
++        },
++        {
++          "case": "abs",
++          "type": "407"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "404"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "293",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "setup",
++        "cancelling",
++        "cancelled",
++        "active",
++        "postcopy-active",
++        "postcopy-paused",
++        "postcopy-recover",
++        "completed",
++        "failed",
++        "colo",
++        "pre-switchover",
++        "device"
++      ]
++    },
++    {
++      "name": "294",
++      "members": [
++        {
++          "name": "transferred",
++          "type": "int"
++        },
++        {
++          "name": "remaining",
++          "type": "int"
++        },
++        {
++          "name": "total",
++          "type": "int"
++        },
++        {
++          "name": "duplicate",
++          "type": "int"
++        },
++        {
++          "name": "skipped",
++          "type": "int"
++        },
++        {
++          "name": "normal",
++          "type": "int"
++        },
++        {
++          "name": "normal-bytes",
++          "type": "int"
++        },
++        {
++          "name": "dirty-pages-rate",
++          "type": "int"
++        },
++        {
++          "name": "mbps",
++          "type": "number"
++        },
++        {
++          "name": "dirty-sync-count",
++          "type": "int"
++        },
++        {
++          "name": "postcopy-requests",
++          "type": "int"
++        },
++        {
++          "name": "page-size",
++          "type": "int"
++        },
++        {
++          "name": "multifd-bytes",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "295",
++      "members": [
++        {
++          "name": "cache-size",
++          "type": "int"
++        },
++        {
++          "name": "bytes",
++          "type": "int"
++        },
++        {
++          "name": "pages",
++          "type": "int"
++        },
++        {
++          "name": "cache-miss",
++          "type": "int"
++        },
++        {
++          "name": "cache-miss-rate",
++          "type": "number"
++        },
++        {
++          "name": "overflow",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "296",
++      "members": [
++        {
++          "name": "pages",
++          "type": "int"
++        },
++        {
++          "name": "busy",
++          "type": "int"
++        },
++        {
++          "name": "busy-rate",
++          "type": "number"
++        },
++        {
++          "name": "compressed-size",
++          "type": "int"
++        },
++        {
++          "name": "compression-rate",
++          "type": "number"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "297",
++      "meta-type": "enum",
++      "values": [
++        "xbzrle",
++        "rdma-pin-all",
++        "auto-converge",
++        "zero-blocks",
++        "compress",
++        "events",
++        "postcopy-ram",
++        "x-colo",
++        "release-ram",
++        "block",
++        "return-path",
++        "pause-before-switchover",
++        "x-multifd",
++        "dirty-bitmaps",
++        "postcopy-blocktime",
++        "late-block-activate"
++      ]
++    },
++    {
++      "name": "298",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "primary",
++        "secondary"
++      ]
++    },
++    {
++      "name": "299",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "request",
++        "error"
++      ]
++    },
++    {
++      "name": "number",
++      "json-type": "number",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "[300]",
++      "element-type": "300",
++      "meta-type": "array"
++    },
++    {
++      "name": "300",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "abort",
++          "type": "409"
++        },
++        {
++          "case": "block-dirty-bitmap-add",
++          "type": "410"
++        },
++        {
++          "case": "block-dirty-bitmap-clear",
++          "type": "411"
++        },
++        {
++          "case": "x-block-dirty-bitmap-enable",
++          "type": "411"
++        },
++        {
++          "case": "x-block-dirty-bitmap-disable",
++          "type": "411"
++        },
++        {
++          "case": "x-block-dirty-bitmap-merge",
++          "type": "412"
++        },
++        {
++          "case": "blockdev-backup",
++          "type": "413"
++        },
++        {
++          "case": "blockdev-snapshot",
++          "type": "414"
++        },
++        {
++          "case": "blockdev-snapshot-internal-sync",
++          "type": "415"
++        },
++        {
++          "case": "blockdev-snapshot-sync",
++          "type": "416"
++        },
++        {
++          "case": "drive-backup",
++          "type": "417"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "408"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "301",
++      "members": [
++        {
++          "name": "completion-mode",
++          "default": null,
++          "type": "418"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "302",
++      "meta-type": "enum",
++      "values": [
++        "unavailable",
++        "disabled",
++        "enabled"
++      ]
++    },
++    {
++      "name": "303",
++      "meta-type": "enum",
++      "values": [
++        "builtin",
++        "enum",
++        "array",
++        "object",
++        "alternate",
++        "command",
++        "event"
++      ]
++    },
++    {
++      "name": "304",
++      "members": [
++        {
++          "name": "json-type",
++          "type": "419"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "305",
++      "members": [
++        {
++          "name": "values",
++          "type": "[str]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "306",
++      "members": [
++        {
++          "name": "element-type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "307",
++      "members": [
++        {
++          "name": "members",
++          "type": "[420]"
++        },
++        {
++          "name": "tag",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "variants",
++          "default": null,
++          "type": "[421]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "308",
++      "members": [
++        {
++          "name": "members",
++          "type": "[422]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "309",
++      "members": [
++        {
++          "name": "arg-type",
++          "type": "str"
++        },
++        {
++          "name": "ret-type",
++          "type": "str"
++        },
++        {
++          "name": "allow-oob",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "310",
++      "members": [
++        {
++          "name": "arg-type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[311]",
++      "element-type": "311",
++      "meta-type": "array"
++    },
++    {
++      "name": "311",
++      "meta-type": "enum",
++      "values": [
++        "oob"
++      ]
++    },
++    {
++      "name": "312",
++      "members": [
++        {
++          "name": "major",
++          "type": "int"
++        },
++        {
++          "name": "minor",
++          "type": "int"
++        },
++        {
++          "name": "micro",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "313",
++      "members": [
++        {
++          "name": "node-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "socket-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "core-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "thread-id",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "314",
++      "meta-type": "enum",
++      "values": [
++        "x86",
++        "sparc",
++        "ppc",
++        "mips",
++        "tricore",
++        "s390",
++        "riscv",
++        "other"
++      ]
++    },
++    {
++      "name": "315",
++      "members": [
++        {
++          "name": "pc",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "316",
++      "members": [
++        {
++          "name": "pc",
++          "type": "int"
++        },
++        {
++          "name": "npc",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "317",
++      "members": [
++        {
++          "name": "nip",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "318",
++      "members": [
++        {
++          "name": "PC",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "319",
++      "members": [
++        {
++          "name": "PC",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "320",
++      "members": [
++        {
++          "name": "cpu-state",
++          "type": "423"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "321",
++      "members": [
++        {
++          "name": "pc",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "322",
++      "meta-type": "enum",
++      "values": [
++        "aarch64",
++        "alpha",
++        "arm",
++        "cris",
++        "hppa",
++        "i386",
++        "lm32",
++        "m68k",
++        "microblaze",
++        "microblazeel",
++        "mips",
++        "mips64",
++        "mips64el",
++        "mipsel",
++        "moxie",
++        "nios2",
++        "or1k",
++        "ppc",
++        "ppc64",
++        "riscv32",
++        "riscv64",
++        "s390x",
++        "sh4",
++        "sh4eb",
++        "sparc",
++        "sparc64",
++        "tricore",
++        "unicore32",
++        "x86_64",
++        "xtensa",
++        "xtensaeb"
++      ]
++    },
++    {
++      "name": "[323]",
++      "element-type": "323",
++      "meta-type": "array"
++    },
++    {
++      "name": "323",
++      "members": [
++        {
++          "name": "bus",
++          "type": "int"
++        },
++        {
++          "name": "slot",
++          "type": "int"
++        },
++        {
++          "name": "function",
++          "type": "int"
++        },
++        {
++          "name": "class_info",
++          "type": "424"
++        },
++        {
++          "name": "id",
++          "type": "425"
++        },
++        {
++          "name": "irq",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "qdev_id",
++          "type": "str"
++        },
++        {
++          "name": "pci_bridge",
++          "default": null,
++          "type": "426"
++        },
++        {
++          "name": "regions",
++          "type": "[427]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "324",
++      "meta-type": "enum",
++      "values": [
++        "elf",
++        "kdump-zlib",
++        "kdump-lzo",
++        "kdump-snappy",
++        "win-dmp"
++      ]
++    },
++    {
++      "name": "325",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "active",
++        "completed",
++        "failed"
++      ]
++    },
++    {
++      "name": "[324]",
++      "element-type": "324",
++      "meta-type": "array"
++    },
++    {
++      "name": "326",
++      "meta-type": "enum",
++      "values": [
++        "static",
++        "full"
++      ]
++    },
++    {
++      "name": "327",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "328",
++      "meta-type": "enum",
++      "values": [
++        "incompatible",
++        "identical",
++        "superset",
++        "subset"
++      ]
++    },
++    {
++      "name": "[329]",
++      "element-type": "329",
++      "meta-type": "array"
++    },
++    {
++      "name": "329",
++      "members": [
++        {
++          "name": "fd",
++          "type": "int"
++        },
++        {
++          "name": "opaque",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[330]",
++      "element-type": "330",
++      "meta-type": "array"
++    },
++    {
++      "name": "330",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "428"
++        },
++        {
++          "name": "help",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "default",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "331",
++      "meta-type": "enum",
++      "values": [
++        "default",
++        "preferred",
++        "bind",
++        "interleave"
++      ]
++    },
++    {
++      "name": "332",
++      "meta-type": "enum",
++      "values": [
++        "dimm",
++        "nvdimm"
++      ]
++    },
++    {
++      "name": "333",
++      "members": [
++        {
++          "name": "data",
++          "type": "429"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "334",
++      "meta-type": "enum",
++      "values": [
++        "DIMM",
++        "CPU"
++      ]
++    },
++    {
++      "name": "335",
++      "meta-type": "enum",
++      "values": [
++        "uninit",
++        "launch-update",
++        "launch-secret",
++        "running",
++        "send-update",
++        "receive-update"
++      ]
++    },
++    {
++      "name": "336",
++      "meta-type": "enum",
++      "values": [
++        "queue-full"
++      ]
++    },
++    {
++      "name": "337",
++      "meta-type": "enum",
++      "values": [
++        "node",
++        "dist",
++        "cpu"
++      ]
++    },
++    {
++      "name": "338",
++      "members": [
++        {
++          "name": "nodeid",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpus",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "mem",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "memdev",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "339",
++      "members": [
++        {
++          "name": "src",
++          "type": "int"
++        },
++        {
++          "name": "dst",
++          "type": "int"
++        },
++        {
++          "name": "val",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "340",
++      "members": [
++        {
++          "name": "node-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "socket-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "core-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "thread-id",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "341",
++      "meta-type": "enum",
++      "values": [
++        "hyper-v",
++        "s390"
++      ]
++    },
++    {
++      "name": "342",
++      "members": [
++        {
++          "name": "arg1",
++          "type": "int"
++        },
++        {
++          "name": "arg2",
++          "type": "int"
++        },
++        {
++          "name": "arg3",
++          "type": "int"
++        },
++        {
++          "name": "arg4",
++          "type": "int"
++        },
++        {
++          "name": "arg5",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "343",
++      "members": [
++        {
++          "name": "core",
++          "type": "int"
++        },
++        {
++          "name": "psw-mask",
++          "type": "int"
++        },
++        {
++          "name": "psw-addr",
++          "type": "int"
++        },
++        {
++          "name": "reason",
++          "type": "430"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "344",
++      "meta-type": "enum",
++      "values": [
++        "active",
++        "disabled",
++        "frozen",
++        "locked"
++      ]
++    },
++    {
++      "name": "[345]",
++      "element-type": "345",
++      "meta-type": "array"
++    },
++    {
++      "name": "345",
++      "members": [
++        {
++          "name": "interval_length",
++          "type": "int"
++        },
++        {
++          "name": "min_rd_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "max_rd_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_rd_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "min_wr_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "max_wr_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_wr_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "min_flush_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "max_flush_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_flush_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_rd_queue_depth",
++          "type": "number"
++        },
++        {
++          "name": "avg_wr_queue_depth",
++          "type": "number"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "346",
++      "members": [
++        {
++          "name": "boundaries",
++          "type": "[int]"
++        },
++        {
++          "name": "bins",
++          "type": "[int]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[66]",
++      "element-type": "66",
++      "meta-type": "array"
++    },
++    {
++      "name": "347",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "qcow2",
++          "type": "432"
++        },
++        {
++          "case": "vmdk",
++          "type": "433"
++        },
++        {
++          "case": "luks",
++          "type": "434"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "431"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "348",
++      "members": [
++        {
++          "type": "44"
++        },
++        {
++          "type": "str"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "[349]",
++      "element-type": "349",
++      "meta-type": "array"
++    },
++    {
++      "name": "349",
++      "members": [
++        {
++          "name": "event",
++          "type": "435"
++        },
++        {
++          "name": "state",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "errno",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "sector",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "once",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "immediately",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[350]",
++      "element-type": "350",
++      "meta-type": "array"
++    },
++    {
++      "name": "350",
++      "members": [
++        {
++          "name": "event",
++          "type": "435"
++        },
++        {
++          "name": "state",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "new_state",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "351",
++      "meta-type": "enum",
++      "values": [
++        "auto",
++        "on",
++        "off"
++      ]
++    },
++    {
++      "name": "352",
++      "meta-type": "enum",
++      "values": [
++        "threads",
++        "native"
++      ]
++    },
++    {
++      "name": "[353]",
++      "element-type": "353",
++      "meta-type": "array"
++    },
++    {
++      "name": "353",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "inet",
++          "type": "365"
++        },
++        {
++          "case": "unix",
++          "type": "437"
++        },
++        {
++          "case": "vsock",
++          "type": "438"
++        },
++        {
++          "case": "fd",
++          "type": "439"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "436"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "354",
++      "meta-type": "enum",
++      "values": [
++        "tcp",
++        "iser"
++      ]
++    },
++    {
++      "name": "355",
++      "meta-type": "enum",
++      "values": [
++        "crc32c",
++        "none",
++        "crc32c-none",
++        "none-crc32c"
++      ]
++    },
++    {
++      "name": "356",
++      "members": [
++        {
++          "name": "type",
++          "type": "440"
++        },
++        {
++          "name": "host",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "357",
++      "members": [
++        {
++          "type": "44"
++        },
++        {
++          "type": "str"
++        },
++        {
++          "type": "null"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "358",
++      "members": [
++        {
++          "type": "441"
++        },
++        {
++          "type": "442"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "359",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "aes",
++          "type": "444"
++        },
++        {
++          "case": "luks",
++          "type": "445"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "443"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "360",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "aes",
++          "type": "444"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "446"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[348]",
++      "element-type": "348",
++      "meta-type": "array"
++    },
++    {
++      "name": "361",
++      "meta-type": "enum",
++      "values": [
++        "quorum",
++        "fifo"
++      ]
++    },
++    {
++      "name": "[362]",
++      "element-type": "362",
++      "meta-type": "array"
++    },
++    {
++      "name": "362",
++      "meta-type": "enum",
++      "values": [
++        "cephx",
++        "none"
++      ]
++    },
++    {
++      "name": "[363]",
++      "element-type": "363",
++      "meta-type": "array"
++    },
++    {
++      "name": "363",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "364",
++      "meta-type": "enum",
++      "values": [
++        "primary",
++        "secondary"
++      ]
++    },
++    {
++      "name": "365",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        },
++        {
++          "name": "numeric",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "to",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ipv4",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "ipv6",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "366",
++      "tag": "mode",
++      "variants": [
++        {
++          "case": "hash",
++          "type": "448"
++        },
++        {
++          "case": "none",
++          "type": "0"
++        },
++        {
++          "case": "known_hosts",
++          "type": "0"
++        }
++      ],
++      "members": [
++        {
++          "name": "mode",
++          "type": "447"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "367",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "preallocation",
++          "default": null,
++          "type": "449"
++        },
++        {
++          "name": "nocow",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "368",
++      "members": [
++        {
++          "name": "location",
++          "type": "242"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "preallocation",
++          "default": null,
++          "type": "449"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "369",
++      "members": [
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cipher-alg",
++          "default": null,
++          "type": "450"
++        },
++        {
++          "name": "cipher-mode",
++          "default": null,
++          "type": "451"
++        },
++        {
++          "name": "ivgen-alg",
++          "default": null,
++          "type": "452"
++        },
++        {
++          "name": "ivgen-hash-alg",
++          "default": null,
++          "type": "453"
++        },
++        {
++          "name": "hash-alg",
++          "default": null,
++          "type": "453"
++        },
++        {
++          "name": "iter-time",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "370",
++      "members": [
++        {
++          "name": "location",
++          "type": "248"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "371",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "372",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "454"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "373",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "version",
++          "default": null,
++          "type": "455"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-fmt",
++          "default": null,
++          "type": "232"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "454"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "preallocation",
++          "default": null,
++          "type": "449"
++        },
++        {
++          "name": "lazy-refcounts",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-bits",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "374",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-fmt",
++          "default": null,
++          "type": "232"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "table-size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "375",
++      "members": [
++        {
++          "name": "location",
++          "type": "256"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "376",
++      "members": [
++        {
++          "name": "location",
++          "type": "258"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "preallocation",
++          "default": null,
++          "type": "449"
++        },
++        {
++          "name": "redundancy",
++          "default": null,
++          "type": "456"
++        },
++        {
++          "name": "object-size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "377",
++      "members": [
++        {
++          "name": "location",
++          "type": "259"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "378",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "preallocation",
++          "default": null,
++          "type": "449"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "379",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "log-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "block-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "subformat",
++          "default": null,
++          "type": "457"
++        },
++        {
++          "name": "block-state-zero",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "380",
++      "members": [
++        {
++          "name": "file",
++          "type": "348"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "subformat",
++          "default": null,
++          "type": "458"
++        },
++        {
++          "name": "force-size",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "null",
++      "json-type": "null",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "381",
++      "meta-type": "enum",
++      "values": [
++        "inet",
++        "unix",
++        "vsock",
++        "fd"
++      ]
++    },
++    {
++      "name": "382",
++      "members": [
++        {
++          "name": "data",
++          "type": "365"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "383",
++      "members": [
++        {
++          "name": "data",
++          "type": "437"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "384",
++      "members": [
++        {
++          "name": "data",
++          "type": "438"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "385",
++      "members": [
++        {
++          "name": "data",
++          "type": "439"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "386",
++      "meta-type": "enum",
++      "values": [
++        "file",
++        "serial",
++        "parallel",
++        "pipe",
++        "socket",
++        "udp",
++        "pty",
++        "null",
++        "mux",
++        "msmouse",
++        "wctablet",
++        "braille",
++        "testdev",
++        "stdio",
++        "console",
++        "spicevmc",
++        "spiceport",
++        "vc",
++        "ringbuf",
++        "memory"
++      ]
++    },
++    {
++      "name": "387",
++      "members": [
++        {
++          "name": "data",
++          "type": "459"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "388",
++      "members": [
++        {
++          "name": "data",
++          "type": "460"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "389",
++      "members": [
++        {
++          "name": "data",
++          "type": "461"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "390",
++      "members": [
++        {
++          "name": "data",
++          "type": "462"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "391",
++      "members": [
++        {
++          "name": "data",
++          "type": "463"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "392",
++      "members": [
++        {
++          "name": "data",
++          "type": "464"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "393",
++      "members": [
++        {
++          "name": "data",
++          "type": "465"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "394",
++      "members": [
++        {
++          "name": "data",
++          "type": "466"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "395",
++      "members": [
++        {
++          "name": "data",
++          "type": "467"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "396",
++      "members": [
++        {
++          "name": "data",
++          "type": "468"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "397",
++      "members": [
++        {
++          "name": "data",
++          "type": "469"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "398",
++      "meta-type": "enum",
++      "values": [
++        "passthrough",
++        "emulator"
++      ]
++    },
++    {
++      "name": "399",
++      "members": [
++        {
++          "name": "data",
++          "type": "470"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "400",
++      "members": [
++        {
++          "name": "data",
++          "type": "471"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "401",
++      "meta-type": "enum",
++      "values": [
++        "number",
++        "qcode"
++      ]
++    },
++    {
++      "name": "402",
++      "members": [
++        {
++          "name": "data",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "403",
++      "members": [
++        {
++          "name": "data",
++          "type": "472"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "404",
++      "meta-type": "enum",
++      "values": [
++        "key",
++        "btn",
++        "rel",
++        "abs"
++      ]
++    },
++    {
++      "name": "405",
++      "members": [
++        {
++          "name": "data",
++          "type": "473"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "406",
++      "members": [
++        {
++          "name": "data",
++          "type": "474"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "407",
++      "members": [
++        {
++          "name": "data",
++          "type": "475"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "408",
++      "meta-type": "enum",
++      "values": [
++        "abort",
++        "block-dirty-bitmap-add",
++        "block-dirty-bitmap-clear",
++        "x-block-dirty-bitmap-enable",
++        "x-block-dirty-bitmap-disable",
++        "x-block-dirty-bitmap-merge",
++        "blockdev-backup",
++        "blockdev-snapshot",
++        "blockdev-snapshot-internal-sync",
++        "blockdev-snapshot-sync",
++        "drive-backup"
++      ]
++    },
++    {
++      "name": "409",
++      "members": [
++        {
++          "name": "data",
++          "type": "476"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "410",
++      "members": [
++        {
++          "name": "data",
++          "type": "30"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "411",
++      "members": [
++        {
++          "name": "data",
++          "type": "31"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "412",
++      "members": [
++        {
++          "name": "data",
++          "type": "32"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "413",
++      "members": [
++        {
++          "name": "data",
++          "type": "27"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "414",
++      "members": [
++        {
++          "name": "data",
++          "type": "23"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "415",
++      "members": [
++        {
++          "name": "data",
++          "type": "64"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "416",
++      "members": [
++        {
++          "name": "data",
++          "type": "22"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "417",
++      "members": [
++        {
++          "name": "data",
++          "type": "26"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "418",
++      "meta-type": "enum",
++      "values": [
++        "individual",
++        "grouped"
++      ]
++    },
++    {
++      "name": "419",
++      "meta-type": "enum",
++      "values": [
++        "string",
++        "number",
++        "int",
++        "boolean",
++        "null",
++        "object",
++        "array",
++        "value"
++      ]
++    },
++    {
++      "name": "[420]",
++      "element-type": "420",
++      "meta-type": "array"
++    },
++    {
++      "name": "420",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "default",
++          "default": null,
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[421]",
++      "element-type": "421",
++      "meta-type": "array"
++    },
++    {
++      "name": "421",
++      "members": [
++        {
++          "name": "case",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[422]",
++      "element-type": "422",
++      "meta-type": "array"
++    },
++    {
++      "name": "422",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "423",
++      "meta-type": "enum",
++      "values": [
++        "uninitialized",
++        "stopped",
++        "check-stop",
++        "operating",
++        "load"
++      ]
++    },
++    {
++      "name": "424",
++      "members": [
++        {
++          "name": "desc",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "class",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "425",
++      "members": [
++        {
++          "name": "device",
++          "type": "int"
++        },
++        {
++          "name": "vendor",
++          "type": "int"
++        },
++        {
++          "name": "subsystem",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "subsystem-vendor",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "426",
++      "members": [
++        {
++          "name": "bus",
++          "type": "477"
++        },
++        {
++          "name": "devices",
++          "default": null,
++          "type": "[323]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[427]",
++      "element-type": "427",
++      "meta-type": "array"
++    },
++    {
++      "name": "427",
++      "members": [
++        {
++          "name": "bar",
++          "type": "int"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "address",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "prefetch",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "mem_type_64",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "428",
++      "meta-type": "enum",
++      "values": [
++        "string",
++        "boolean",
++        "number",
++        "size"
++      ]
++    },
++    {
++      "name": "429",
++      "members": [
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "addr",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "slot",
++          "type": "int"
++        },
++        {
++          "name": "node",
++          "type": "int"
++        },
++        {
++          "name": "memdev",
++          "type": "str"
++        },
++        {
++          "name": "hotplugged",
++          "type": "bool"
++        },
++        {
++          "name": "hotpluggable",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "430",
++      "meta-type": "enum",
++      "values": [
++        "unknown",
++        "disabled-wait",
++        "extint-loop",
++        "pgmint-loop",
++        "opint-loop"
++      ]
++    },
++    {
++      "name": "431",
++      "meta-type": "enum",
++      "values": [
++        "qcow2",
++        "vmdk",
++        "luks"
++      ]
++    },
++    {
++      "name": "432",
++      "members": [
++        {
++          "name": "data",
++          "type": "478"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "433",
++      "members": [
++        {
++          "name": "data",
++          "type": "479"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "434",
++      "members": [
++        {
++          "name": "data",
++          "type": "480"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "435",
++      "meta-type": "enum",
++      "values": [
++        "l1_update",
++        "l1_grow_alloc_table",
++        "l1_grow_write_table",
++        "l1_grow_activate_table",
++        "l2_load",
++        "l2_update",
++        "l2_update_compressed",
++        "l2_alloc_cow_read",
++        "l2_alloc_write",
++        "read_aio",
++        "read_backing_aio",
++        "read_compressed",
++        "write_aio",
++        "write_compressed",
++        "vmstate_load",
++        "vmstate_save",
++        "cow_read",
++        "cow_write",
++        "reftable_load",
++        "reftable_grow",
++        "reftable_update",
++        "refblock_load",
++        "refblock_update",
++        "refblock_update_part",
++        "refblock_alloc",
++        "refblock_alloc_hookup",
++        "refblock_alloc_write",
++        "refblock_alloc_write_blocks",
++        "refblock_alloc_write_table",
++        "refblock_alloc_switch_table",
++        "cluster_alloc",
++        "cluster_alloc_bytes",
++        "cluster_free",
++        "flush_to_os",
++        "flush_to_disk",
++        "pwritev_rmw_head",
++        "pwritev_rmw_after_head",
++        "pwritev_rmw_tail",
++        "pwritev_rmw_after_tail",
++        "pwritev",
++        "pwritev_zero",
++        "pwritev_done",
++        "empty_image_prepare",
++        "l1_shrink_write_table",
++        "l1_shrink_free_l2_clusters",
++        "cor_write"
++      ]
++    },
++    {
++      "name": "436",
++      "meta-type": "enum",
++      "values": [
++        "inet",
++        "unix",
++        "vsock",
++        "fd"
++      ]
++    },
++    {
++      "name": "437",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "438",
++      "members": [
++        {
++          "name": "cid",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "439",
++      "members": [
++        {
++          "name": "str",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "440",
++      "meta-type": "enum",
++      "values": [
++        "inet"
++      ]
++    },
++    {
++      "name": "441",
++      "members": [
++        {
++          "name": "template",
++          "default": null,
++          "type": "442"
++        },
++        {
++          "name": "main-header",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "active-l1",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "active-l2",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-table",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-block",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "snapshot-table",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "inactive-l1",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "inactive-l2",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "bitmap-directory",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "442",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "constant",
++        "cached",
++        "all"
++      ]
++    },
++    {
++      "name": "443",
++      "meta-type": "enum",
++      "values": [
++        "aes",
++        "luks"
++      ]
++    },
++    {
++      "name": "444",
++      "members": [
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "445",
++      "members": [
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "446",
++      "meta-type": "enum",
++      "values": [
++        "aes"
++      ]
++    },
++    {
++      "name": "447",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "hash",
++        "known_hosts"
++      ]
++    },
++    {
++      "name": "448",
++      "members": [
++        {
++          "name": "type",
++          "type": "481"
++        },
++        {
++          "name": "hash",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "449",
++      "meta-type": "enum",
++      "values": [
++        "off",
++        "metadata",
++        "falloc",
++        "full"
++      ]
++    },
++    {
++      "name": "450",
++      "meta-type": "enum",
++      "values": [
++        "aes-128",
++        "aes-192",
++        "aes-256",
++        "des-rfb",
++        "3des",
++        "cast5-128",
++        "serpent-128",
++        "serpent-192",
++        "serpent-256",
++        "twofish-128",
++        "twofish-192",
++        "twofish-256"
++      ]
++    },
++    {
++      "name": "451",
++      "meta-type": "enum",
++      "values": [
++        "ecb",
++        "cbc",
++        "xts",
++        "ctr"
++      ]
++    },
++    {
++      "name": "452",
++      "meta-type": "enum",
++      "values": [
++        "plain",
++        "plain64",
++        "essiv"
++      ]
++    },
++    {
++      "name": "453",
++      "meta-type": "enum",
++      "values": [
++        "md5",
++        "sha1",
++        "sha224",
++        "sha256",
++        "sha384",
++        "sha512",
++        "ripemd160"
++      ]
++    },
++    {
++      "name": "454",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "qcow",
++          "type": "444"
++        },
++        {
++          "case": "luks",
++          "type": "483"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "482"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "455",
++      "meta-type": "enum",
++      "values": [
++        "v2",
++        "v3"
++      ]
++    },
++    {
++      "name": "456",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "full",
++          "type": "485"
++        },
++        {
++          "case": "erasure-coded",
++          "type": "486"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "484"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "457",
++      "meta-type": "enum",
++      "values": [
++        "dynamic",
++        "fixed"
++      ]
++    },
++    {
++      "name": "458",
++      "meta-type": "enum",
++      "values": [
++        "dynamic",
++        "fixed"
++      ]
++    },
++    {
++      "name": "459",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "in",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "out",
++          "type": "str"
++        },
++        {
++          "name": "append",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "460",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "461",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "addr",
++          "type": "268"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "wait",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "nodelay",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "telnet",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "tn3270",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "websocket",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "reconnect",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "462",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "remote",
++          "type": "268"
++        },
++        {
++          "name": "local",
++          "default": null,
++          "type": "268"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "463",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "464",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "chardev",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "465",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "signal",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "466",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "467",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "fqdn",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "468",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "width",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "height",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cols",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "rows",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "469",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "470",
++      "members": [
++        {
++          "name": "path",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cancel-path",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "471",
++      "members": [
++        {
++          "name": "chardev",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "472",
++      "meta-type": "enum",
++      "values": [
++        "unmapped",
++        "shift",
++        "shift_r",
++        "alt",
++        "alt_r",
++        "ctrl",
++        "ctrl_r",
++        "menu",
++        "esc",
++        "1",
++        "2",
++        "3",
++        "4",
++        "5",
++        "6",
++        "7",
++        "8",
++        "9",
++        "0",
++        "minus",
++        "equal",
++        "backspace",
++        "tab",
++        "q",
++        "w",
++        "e",
++        "r",
++        "t",
++        "y",
++        "u",
++        "i",
++        "o",
++        "p",
++        "bracket_left",
++        "bracket_right",
++        "ret",
++        "a",
++        "s",
++        "d",
++        "f",
++        "g",
++        "h",
++        "j",
++        "k",
++        "l",
++        "semicolon",
++        "apostrophe",
++        "grave_accent",
++        "backslash",
++        "z",
++        "x",
++        "c",
++        "v",
++        "b",
++        "n",
++        "m",
++        "comma",
++        "dot",
++        "slash",
++        "asterisk",
++        "spc",
++        "caps_lock",
++        "f1",
++        "f2",
++        "f3",
++        "f4",
++        "f5",
++        "f6",
++        "f7",
++        "f8",
++        "f9",
++        "f10",
++        "num_lock",
++        "scroll_lock",
++        "kp_divide",
++        "kp_multiply",
++        "kp_subtract",
++        "kp_add",
++        "kp_enter",
++        "kp_decimal",
++        "sysrq",
++        "kp_0",
++        "kp_1",
++        "kp_2",
++        "kp_3",
++        "kp_4",
++        "kp_5",
++        "kp_6",
++        "kp_7",
++        "kp_8",
++        "kp_9",
++        "less",
++        "f11",
++        "f12",
++        "print",
++        "home",
++        "pgup",
++        "pgdn",
++        "end",
++        "left",
++        "up",
++        "down",
++        "right",
++        "insert",
++        "delete",
++        "stop",
++        "again",
++        "props",
++        "undo",
++        "front",
++        "copy",
++        "open",
++        "paste",
++        "find",
++        "cut",
++        "lf",
++        "help",
++        "meta_l",
++        "meta_r",
++        "compose",
++        "pause",
++        "ro",
++        "hiragana",
++        "henkan",
++        "yen",
++        "muhenkan",
++        "katakanahiragana",
++        "kp_comma",
++        "kp_equals",
++        "power",
++        "sleep",
++        "wake",
++        "audionext",
++        "audioprev",
++        "audiostop",
++        "audioplay",
++        "audiomute",
++        "volumeup",
++        "volumedown",
++        "mediaselect",
++        "mail",
++        "calculator",
++        "computer",
++        "ac_home",
++        "ac_back",
++        "ac_forward",
++        "ac_refresh",
++        "ac_bookmarks"
++      ]
++    },
++    {
++      "name": "473",
++      "members": [
++        {
++          "name": "key",
++          "type": "291"
++        },
++        {
++          "name": "down",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "474",
++      "members": [
++        {
++          "name": "button",
++          "type": "487"
++        },
++        {
++          "name": "down",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "475",
++      "members": [
++        {
++          "name": "axis",
++          "type": "488"
++        },
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "476",
++      "members": [
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "477",
++      "members": [
++        {
++          "name": "number",
++          "type": "int"
++        },
++        {
++          "name": "secondary",
++          "type": "int"
++        },
++        {
++          "name": "subordinate",
++          "type": "int"
++        },
++        {
++          "name": "io_range",
++          "type": "489"
++        },
++        {
++          "name": "memory_range",
++          "type": "489"
++        },
++        {
++          "name": "prefetchable_range",
++          "type": "489"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "478",
++      "members": [
++        {
++          "name": "compat",
++          "type": "str"
++        },
++        {
++          "name": "lazy-refcounts",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "corrupt",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-bits",
++          "type": "int"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "490"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "479",
++      "members": [
++        {
++          "name": "create-type",
++          "type": "str"
++        },
++        {
++          "name": "cid",
++          "type": "int"
++        },
++        {
++          "name": "parent-cid",
++          "type": "int"
++        },
++        {
++          "name": "extents",
++          "type": "[229]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "480",
++      "members": [
++        {
++          "name": "cipher-alg",
++          "type": "450"
++        },
++        {
++          "name": "cipher-mode",
++          "type": "451"
++        },
++        {
++          "name": "ivgen-alg",
++          "type": "452"
++        },
++        {
++          "name": "ivgen-hash-alg",
++          "default": null,
++          "type": "453"
++        },
++        {
++          "name": "hash-alg",
++          "type": "453"
++        },
++        {
++          "name": "payload-offset",
++          "type": "int"
++        },
++        {
++          "name": "master-key-iters",
++          "type": "int"
++        },
++        {
++          "name": "uuid",
++          "type": "str"
++        },
++        {
++          "name": "slots",
++          "type": "[491]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "481",
++      "meta-type": "enum",
++      "values": [
++        "md5",
++        "sha1"
++      ]
++    },
++    {
++      "name": "482",
++      "meta-type": "enum",
++      "values": [
++        "qcow",
++        "luks"
++      ]
++    },
++    {
++      "name": "483",
++      "members": [
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cipher-alg",
++          "default": null,
++          "type": "450"
++        },
++        {
++          "name": "cipher-mode",
++          "default": null,
++          "type": "451"
++        },
++        {
++          "name": "ivgen-alg",
++          "default": null,
++          "type": "452"
++        },
++        {
++          "name": "ivgen-hash-alg",
++          "default": null,
++          "type": "453"
++        },
++        {
++          "name": "hash-alg",
++          "default": null,
++          "type": "453"
++        },
++        {
++          "name": "iter-time",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "484",
++      "meta-type": "enum",
++      "values": [
++        "full",
++        "erasure-coded"
++      ]
++    },
++    {
++      "name": "485",
++      "members": [
++        {
++          "name": "copies",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "486",
++      "members": [
++        {
++          "name": "data-strips",
++          "type": "int"
++        },
++        {
++          "name": "parity-strips",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "487",
++      "meta-type": "enum",
++      "values": [
++        "left",
++        "middle",
++        "right",
++        "wheel-up",
++        "wheel-down",
++        "side",
++        "extra"
++      ]
++    },
++    {
++      "name": "488",
++      "meta-type": "enum",
++      "values": [
++        "x",
++        "y"
++      ]
++    },
++    {
++      "name": "489",
++      "members": [
++        {
++          "name": "base",
++          "type": "int"
++        },
++        {
++          "name": "limit",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "490",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "luks",
++          "type": "480"
++        },
++        {
++          "case": "aes",
++          "type": "0"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "443"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[229]",
++      "element-type": "229",
++      "meta-type": "array"
++    },
++    {
++      "name": "[491]",
++      "element-type": "491",
++      "meta-type": "array"
++    },
++    {
++      "name": "491",
++      "members": [
++        {
++          "name": "active",
++          "type": "bool"
++        },
++        {
++          "name": "iters",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "stripes",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "key-offset",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    }
++  ],
++  "id": "libvirt-45"
++}
++
++{
++  "execute": "qmp_capabilities",
++  "id": "libvirt-1"
++}
++
++{
++  "return": {
++  },
++  "id": "libvirt-1"
++}
++
++{
++  "execute": "query-cpu-definitions",
++  "id": "libvirt-2"
++}
++
++{
++  "return": [
++    {
++      "name": "default",
++      "typename": "604-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "ppc",
++      "typename": "604-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "ppc32",
++      "typename": "604-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "ppc64",
++      "typename": "970fx_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power9",
++      "typename": "power9_v2.0-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power8nvl",
++      "typename": "power8nvl_v1.0-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power8",
++      "typename": "power8_v2.0-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power8e",
++      "typename": "power8e_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power7+",
++      "typename": "power7+_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power7",
++      "typename": "power7_v2.3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power5gs",
++      "typename": "power5+_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "power5+",
++      "typename": "power5+_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "970mp",
++      "typename": "970mp_v1.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "970fx",
++      "typename": "970fx_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "970",
++      "typename": "970_v2.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "apollo7pm",
++      "typename": "7457a_v1.0-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7457a",
++      "typename": "7457a_v1.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7447a",
++      "typename": "7447a_v1.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "apollo7",
++      "typename": "7457_v1.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7457",
++      "typename": "7457_v1.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7447",
++      "typename": "7447_v1.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "apollo6",
++      "typename": "7455_v3.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7455",
++      "typename": "7455_v3.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7445",
++      "typename": "7445_v3.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7451",
++      "typename": "7451_v2.3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7441",
++      "typename": "7441_v2.3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "vger",
++      "typename": "7450_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7450",
++      "typename": "7450_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7448",
++      "typename": "7448_v2.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "nitro",
++      "typename": "7410_v1.4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7410",
++      "typename": "7410_v1.4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "g4",
++      "typename": "7400_v2.9-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "max",
++      "typename": "7400_v2.9-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "7400",
++      "typename": "7400_v2.9-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "goldfinger",
++      "typename": "755_v2.8-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "755",
++      "typename": "755_v2.8-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "745",
++      "typename": "745_v2.8-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "lonestar",
++      "typename": "750l_v3.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750l",
++      "typename": "750l_v3.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750gx",
++      "typename": "750gx_v1.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750fx",
++      "typename": "750fx_v2.3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750cxe",
++      "typename": "750cxe_v3.1b-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750cx",
++      "typename": "750cx_v2.2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750cl",
++      "typename": "750cl_v2.0-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "conan/doyle",
++      "typename": "750p-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "g3",
++      "typename": "750_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "typhoon",
++      "typename": "750_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "750",
++      "typename": "750_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "arthur",
++      "typename": "740_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "740",
++      "typename": "740_v3.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mach5",
++      "typename": "604r-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "sirocco",
++      "typename": "604e_v2.4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "604e",
++      "typename": "604e_v2.4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "goldeneye",
++      "typename": "603e7t-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "603r",
++      "typename": "603e7t-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "vaillant",
++      "typename": "603e7v-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "stretch",
++      "typename": "603e_v4.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "603e",
++      "typename": "603e_v4.1-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "vanilla",
++      "typename": "603-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "601v",
++      "typename": "601_v2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "601",
++      "typename": "601_v2-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8560",
++      "typename": "mpc8560_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8555e",
++      "typename": "mpc8555e_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8555",
++      "typename": "mpc8555_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8548e",
++      "typename": "mpc8548e_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8548",
++      "typename": "mpc8548_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8547e",
++      "typename": "mpc8547e_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8545e",
++      "typename": "mpc8545e_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8545",
++      "typename": "mpc8545_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8544e",
++      "typename": "mpc8544e_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8544",
++      "typename": "mpc8544_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8543e",
++      "typename": "mpc8543e_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8543",
++      "typename": "mpc8543_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8541e",
++      "typename": "mpc8541e_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8541",
++      "typename": "mpc8541_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8540",
++      "typename": "mpc8540_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8533e",
++      "typename": "mpc8533e_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8533",
++      "typename": "mpc8533_v11-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "e500v2",
++      "typename": "e500v2_v22-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "e500v1",
++      "typename": "e500_v20-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "e500",
++      "typename": "e500v2_v22-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8347ea",
++      "typename": "mpc8347eat-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8347e",
++      "typename": "mpc8347et-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8347a",
++      "typename": "mpc8347at-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8347",
++      "typename": "mpc8347t-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "e300",
++      "typename": "e300c3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "e200",
++      "typename": "e200z6-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8280",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8275",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8272",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8271",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8270",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8266_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8266_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8266",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8265_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8265_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8265",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8264_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8264_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8264",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8260_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8260_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8260",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8255_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8255_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8255",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8250_hip4",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8250_hip3",
++      "typename": "g2hip3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8250",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8248",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8247",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8245",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8241",
++      "typename": "g2hip4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "powerquicc-ii",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc82xx",
++      "typename": "g2legp3-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc5200b",
++      "typename": "mpc5200b_v21-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc5200",
++      "typename": "mpc5200_v12-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc52xx",
++      "typename": "mpc5200_v12-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8240",
++      "typename": "603-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "460ex",
++      "typename": "460exb-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "440ep",
++      "typename": "440epb-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "x2vp50",
++      "typename": "x2vp20-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "x2vp7",
++      "typename": "x2vp4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "405gpe",
++      "typename": "405crc-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "405gp",
++      "typename": "405gpd-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "405cr",
++      "typename": "405crc-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "405",
++      "typename": "405d4-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "403",
++      "typename": "403gc-powerpc64-cpu",
++      "static": false
++    },
++    {
++      "name": "mpc8547e_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cl_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457a_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2gp",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.7",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8377",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7455_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8545_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405d4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2le",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2hip3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8572",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970fx_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fx_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603p",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405gpb",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.7",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8544e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500v2_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500mc",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e7v1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970mp_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405crc",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "403ga",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7447a_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e300c1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8572e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500v2_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970fx_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750gx_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fx_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970fx_v3.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "604e_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.6",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401a1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power9_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "npe405h",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2ls",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7410_v1.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401b2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8349",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347ep",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7445_v3.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8540_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "403gcx",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750l_v3.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v3.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8541e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347p",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8555e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power9_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power7_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e7v",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v3.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.6",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405gpa",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "440epx",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750l_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e200z6",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8547e_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457a_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8349ea",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500v2_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power8nvl_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8540_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.8",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "npe405l",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8343ea",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8545_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7455_v3.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7448_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347et",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7441_v2.10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v1.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401c2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7451_v2.10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cx_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e7",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7448_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7441_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405crb",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "604",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "440-xilinx-w-dfpu",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7445_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "cobra",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8541_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750gx_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v2.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8641d",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543e_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750l_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7450_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.5",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7410_v1.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500v2_v30",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7455_v3.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8540_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405d2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8560_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8343",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347t",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v1.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347eap",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401d2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power8_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v3.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e200z5",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405cra",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.7",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8560_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e5500",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8544_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7448_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401e2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7410_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "x2vp4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347ap",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8533_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc5200b_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fx_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "601_v2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2legp3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "604e_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cx_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8610",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2h4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750l_v3.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8377e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e300c4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc5200_v12",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7448_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7450_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v3.1b",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.9",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405gpd",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e7t",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8555_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750gx_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8541_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8543e_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fl",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750l_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "stb04",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548e_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "x2vp20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405ez",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e600",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7450_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8379",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7445_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7447_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2legp",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7455_v3.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8560_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "440-xilinx",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401f2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8533_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8349a",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405gpr",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "stb25",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc5200b_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fx_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347eat",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "601_v1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cx_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7447a_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "403gc",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e300c3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc5200_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7441_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740_v3.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8545e_v21",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "602",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8378e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8343a",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "460exb",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8555_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8568",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457a_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cx_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "604e_v2.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.8",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405lp",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.6",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "stb03",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405ep",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8544_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8347at",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7450_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "755_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7410_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750gl",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e6500",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750p",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7445_v3.4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "440epb",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "npe4gs3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8349e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970_v2.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2lels",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2hip4",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "740p",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8567e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8533e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7451_v2.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401g2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7400_v2.8",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7455_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "405gpc",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power7+_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8544e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7450_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970mp_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e7v2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "604r",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e500v2_v22",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8548e_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8545e_v20",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8378",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8567",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7457_v1.2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7447_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970fx_v3.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v2.5",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8379e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8641",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v2.4b",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7410_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc603",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "603e_v4.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7445_v3.3",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "440epa",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "970fx_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "iop480",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750fx_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "601_v0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "g2legp1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "745_v1.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cl_v2.0",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxr",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "401",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8541e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750cxe_v3.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8555e_v11",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power8e_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "7447a_v1.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "403gb",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "e300c2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "npe405h2",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8343e",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8533e_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc5200_v10",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "750_v3.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "power5+_v2.1",
++      "typename": "",
++      "static": false
++    },
++    {
++      "name": "mpc8568e",
++      "typename": "",
++      "static": false
++    }
++  ],
++  "id": "libvirt-2"
++}
+diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
+new file mode 100644
+index 0000000000..bdd339c54a
+--- /dev/null
++++ b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
+@@ -0,0 +1,1081 @@
++<qemuCaps>
++  <qemuctime>0</qemuctime>
++  <selfctime>0</selfctime>
++  <selfvers>0</selfvers>
++  <usedQMP/>
++  <flag name='kvm'/>
++  <flag name='boot-index'/>
++  <flag name='hda-duplex'/>
++  <flag name='virtio-tx-alg'/>
++  <flag name='virtio-blk-pci.ioeventfd'/>
++  <flag name='virtio-blk-pci.event_idx'/>
++  <flag name='virtio-net-pci.event_idx'/>
++  <flag name='piix3-usb-uhci'/>
++  <flag name='piix4-usb-uhci'/>
++  <flag name='usb-ehci'/>
++  <flag name='ich9-usb-ehci1'/>
++  <flag name='vt82c686b-usb-uhci'/>
++  <flag name='pci-ohci'/>
++  <flag name='usb-hub'/>
++  <flag name='ich9-ahci'/>
++  <flag name='virtio-blk-pci.scsi'/>
++  <flag name='scsi-disk.channel'/>
++  <flag name='scsi-block'/>
++  <flag name='transaction'/>
++  <flag name='block-job-async'/>
++  <flag name='scsi-cd'/>
++  <flag name='ide-cd'/>
++  <flag name='hda-micro'/>
++  <flag name='dump-guest-memory'/>
++  <flag name='nec-usb-xhci'/>
++  <flag name='balloon-event'/>
++  <flag name='lsi'/>
++  <flag name='virtio-scsi-pci'/>
++  <flag name='blockio'/>
++  <flag name='ide-drive.wwn'/>
++  <flag name='scsi-disk.wwn'/>
++  <flag name='seccomp-sandbox'/>
++  <flag name='reboot-timeout'/>
++  <flag name='seamless-migration'/>
++  <flag name='block-commit'/>
++  <flag name='vnc'/>
++  <flag name='drive-mirror'/>
++  <flag name='usb-host.bootindex'/>
++  <flag name='blockdev-snapshot-sync'/>
++  <flag name='VGA'/>
++  <flag name='cirrus-vga'/>
++  <flag name='device-video-primary'/>
++  <flag name='usb-serial'/>
++  <flag name='usb-net'/>
++  <flag name='add-fd'/>
++  <flag name='nbd-server'/>
++  <flag name='virtio-rng'/>
++  <flag name='rng-random'/>
++  <flag name='rng-egd'/>
++  <flag name='megasas'/>
++  <flag name='nvram'/>
++  <flag name='pci-bridge'/>
++  <flag name='vfio-pci'/>
++  <flag name='vfio-pci.bootindex'/>
++  <flag name='scsi-generic'/>
++  <flag name='scsi-generic.bootindex'/>
++  <flag name='mem-merge'/>
++  <flag name='vnc-websocket'/>
++  <flag name='drive-discard'/>
++  <flag name='mlock'/>
++  <flag name='device-del-event'/>
++  <flag name='usb-storage'/>
++  <flag name='usb-storage.removable'/>
++  <flag name='ich9-intel-hda'/>
++  <flag name='boot-strict'/>
++  <flag name='spiceport'/>
++  <flag name='usb-kbd'/>
++  <flag name='msg-timestamp'/>
++  <flag name='active-commit'/>
++  <flag name='change-backing-file'/>
++  <flag name='memory-backend-ram'/>
++  <flag name='numa'/>
++  <flag name='memory-backend-file'/>
++  <flag name='usb-audio'/>
++  <flag name='splash-timeout'/>
++  <flag name='iothread'/>
++  <flag name='migrate-rdma'/>
++  <flag name='ivshmem'/>
++  <flag name='drive-iotune-max'/>
++  <flag name='VGA.vgamem_mb'/>
++  <flag name='pc-dimm'/>
++  <flag name='machine-vmport-opt'/>
++  <flag name='aes-key-wrap'/>
++  <flag name='dea-key-wrap'/>
++  <flag name='pci-serial'/>
++  <flag name='vhost-user-multiqueue'/>
++  <flag name='migration-event'/>
++  <flag name='rtl8139'/>
++  <flag name='e1000'/>
++  <flag name='virtio-net'/>
++  <flag name='gic-version'/>
++  <flag name='incoming-defer'/>
++  <flag name='virtio-gpu'/>
++  <flag name='virtio-keyboard'/>
++  <flag name='virtio-mouse'/>
++  <flag name='virtio-tablet'/>
++  <flag name='virtio-input-host'/>
++  <flag name='chardev-file-append'/>
++  <flag name='vserport-change-event'/>
++  <flag name='virtio-balloon-pci.deflate-on-oom'/>
++  <flag name='mptsas1068'/>
++  <flag name='chardev-logfile'/>
++  <flag name='debug-threads'/>
++  <flag name='secret'/>
++  <flag name='device-tray-moved-event'/>
++  <flag name='nec-usb-xhci-ports'/>
++  <flag name='virtio-scsi-pci.iothread'/>
++  <flag name='name-guest'/>
++  <flag name='drive-detect-zeroes'/>
++  <flag name='tls-creds-x509'/>
++  <flag name='smm'/>
++  <flag name='virtio-pci-disable-legacy'/>
++  <flag name='query-hotpluggable-cpus'/>
++  <flag name='virtio-net.rx_queue_size'/>
++  <flag name='virtio-vga'/>
++  <flag name='drive-iotune-max-length'/>
++  <flag name='ivshmem-plain'/>
++  <flag name='ivshmem-doorbell'/>
++  <flag name='query-qmp-schema'/>
++  <flag name='gluster.debug_level'/>
++  <flag name='vhost-scsi'/>
++  <flag name='drive-iotune-group'/>
++  <flag name='virtio-net.host_mtu'/>
++  <flag name='query-cpu-definitions'/>
++  <flag name='block-write-threshold'/>
++  <flag name='query-named-block-nodes'/>
++  <flag name='qemu-xhci'/>
++  <flag name='kernel-irqchip'/>
++  <flag name='kernel-irqchip.split'/>
++  <flag name='virtio.iommu_platform'/>
++  <flag name='virtio.ats'/>
++  <flag name='loadparm'/>
++  <flag name='spapr-pci-host-bridge'/>
++  <flag name='spapr-pci-host-bridge.numa_node'/>
++  <flag name='vnc-multi-servers'/>
++  <flag name='virtio-net.tx_queue_size'/>
++  <flag name='chardev-reconnect'/>
++  <flag name='virtio-gpu.max_outputs'/>
++  <flag name='vxhs'/>
++  <flag name='virtio-blk.num-queues'/>
++  <flag name='machine.pseries.resize-hpt'/>
++  <flag name='spapr-vty'/>
++  <flag name='numa.dist'/>
++  <flag name='disk-share-rw'/>
++  <flag name='iscsi.password-secret'/>
++  <flag name='isa-serial'/>
++  <flag name='machine.pseries.max-cpu-compat'/>
++  <flag name='dump-completed'/>
++  <flag name='qcow2-luks'/>
++  <flag name='seccomp-blacklist'/>
++  <flag name='query-cpus-fast'/>
++  <flag name='disk-write-cache'/>
++  <flag name='nbd-tls'/>
++  <flag name='pr-manager-helper'/>
++  <flag name='qom-list-properties'/>
++  <flag name='memory-backend-file.discard-data'/>
++  <flag name='sdl-gl'/>
++  <flag name='screendump_device'/>
++  <flag name='hda-output'/>
++  <flag name='blockdev-del'/>
++  <flag name='vhost-vsock'/>
++  <flag name='chardev-fd-pass'/>
++  <flag name='tpm-emulator'/>
++  <flag name='machine.pseries.cap-hpt-max-page-size'/>
++  <flag name='machine.pseries.cap-htm'/>
++  <flag name='usb-storage.werror'/>
++  <flag name='egl-headless'/>
++  <flag name='vfio-pci.display'/>
++  <version>3000091</version>
++  <kvmVersion>0</kvmVersion>
++  <microcodeVersion>439018</microcodeVersion>
++  <package>v3.1.0-rc1-74-g3c035a41dc</package>
++  <arch>ppc64</arch>
++  <cpu type='kvm' name='default'/>
++  <cpu type='kvm' name='ppc'/>
++  <cpu type='kvm' name='ppc32'/>
++  <cpu type='kvm' name='ppc64'/>
++  <cpu type='kvm' name='power9'/>
++  <cpu type='kvm' name='power8nvl'/>
++  <cpu type='kvm' name='power8'/>
++  <cpu type='kvm' name='power8e'/>
++  <cpu type='kvm' name='power7+'/>
++  <cpu type='kvm' name='power7'/>
++  <cpu type='kvm' name='power5gs'/>
++  <cpu type='kvm' name='power5+'/>
++  <cpu type='kvm' name='970mp'/>
++  <cpu type='kvm' name='970fx'/>
++  <cpu type='kvm' name='970'/>
++  <cpu type='kvm' name='apollo7pm'/>
++  <cpu type='kvm' name='7457a'/>
++  <cpu type='kvm' name='7447a'/>
++  <cpu type='kvm' name='apollo7'/>
++  <cpu type='kvm' name='7457'/>
++  <cpu type='kvm' name='7447'/>
++  <cpu type='kvm' name='apollo6'/>
++  <cpu type='kvm' name='7455'/>
++  <cpu type='kvm' name='7445'/>
++  <cpu type='kvm' name='7451'/>
++  <cpu type='kvm' name='7441'/>
++  <cpu type='kvm' name='vger'/>
++  <cpu type='kvm' name='7450'/>
++  <cpu type='kvm' name='7448'/>
++  <cpu type='kvm' name='nitro'/>
++  <cpu type='kvm' name='7410'/>
++  <cpu type='kvm' name='g4'/>
++  <cpu type='kvm' name='max'/>
++  <cpu type='kvm' name='7400'/>
++  <cpu type='kvm' name='goldfinger'/>
++  <cpu type='kvm' name='755'/>
++  <cpu type='kvm' name='745'/>
++  <cpu type='kvm' name='lonestar'/>
++  <cpu type='kvm' name='750l'/>
++  <cpu type='kvm' name='750gx'/>
++  <cpu type='kvm' name='750fx'/>
++  <cpu type='kvm' name='750cxe'/>
++  <cpu type='kvm' name='750cx'/>
++  <cpu type='kvm' name='750cl'/>
++  <cpu type='kvm' name='conan/doyle'/>
++  <cpu type='kvm' name='g3'/>
++  <cpu type='kvm' name='typhoon'/>
++  <cpu type='kvm' name='750'/>
++  <cpu type='kvm' name='arthur'/>
++  <cpu type='kvm' name='740'/>
++  <cpu type='kvm' name='mach5'/>
++  <cpu type='kvm' name='sirocco'/>
++  <cpu type='kvm' name='604e'/>
++  <cpu type='kvm' name='goldeneye'/>
++  <cpu type='kvm' name='603r'/>
++  <cpu type='kvm' name='vaillant'/>
++  <cpu type='kvm' name='stretch'/>
++  <cpu type='kvm' name='603e'/>
++  <cpu type='kvm' name='vanilla'/>
++  <cpu type='kvm' name='601v'/>
++  <cpu type='kvm' name='601'/>
++  <cpu type='kvm' name='mpc8560'/>
++  <cpu type='kvm' name='mpc8555e'/>
++  <cpu type='kvm' name='mpc8555'/>
++  <cpu type='kvm' name='mpc8548e'/>
++  <cpu type='kvm' name='mpc8548'/>
++  <cpu type='kvm' name='mpc8547e'/>
++  <cpu type='kvm' name='mpc8545e'/>
++  <cpu type='kvm' name='mpc8545'/>
++  <cpu type='kvm' name='mpc8544e'/>
++  <cpu type='kvm' name='mpc8544'/>
++  <cpu type='kvm' name='mpc8543e'/>
++  <cpu type='kvm' name='mpc8543'/>
++  <cpu type='kvm' name='mpc8541e'/>
++  <cpu type='kvm' name='mpc8541'/>
++  <cpu type='kvm' name='mpc8540'/>
++  <cpu type='kvm' name='mpc8533e'/>
++  <cpu type='kvm' name='mpc8533'/>
++  <cpu type='kvm' name='e500v2'/>
++  <cpu type='kvm' name='e500v1'/>
++  <cpu type='kvm' name='e500'/>
++  <cpu type='kvm' name='mpc8347ea'/>
++  <cpu type='kvm' name='mpc8347e'/>
++  <cpu type='kvm' name='mpc8347a'/>
++  <cpu type='kvm' name='mpc8347'/>
++  <cpu type='kvm' name='e300'/>
++  <cpu type='kvm' name='e200'/>
++  <cpu type='kvm' name='mpc8280'/>
++  <cpu type='kvm' name='mpc8275'/>
++  <cpu type='kvm' name='mpc8272'/>
++  <cpu type='kvm' name='mpc8271'/>
++  <cpu type='kvm' name='mpc8270'/>
++  <cpu type='kvm' name='mpc8266_hip4'/>
++  <cpu type='kvm' name='mpc8266_hip3'/>
++  <cpu type='kvm' name='mpc8266'/>
++  <cpu type='kvm' name='mpc8265_hip4'/>
++  <cpu type='kvm' name='mpc8265_hip3'/>
++  <cpu type='kvm' name='mpc8265'/>
++  <cpu type='kvm' name='mpc8264_hip4'/>
++  <cpu type='kvm' name='mpc8264_hip3'/>
++  <cpu type='kvm' name='mpc8264'/>
++  <cpu type='kvm' name='mpc8260_hip4'/>
++  <cpu type='kvm' name='mpc8260_hip3'/>
++  <cpu type='kvm' name='mpc8260'/>
++  <cpu type='kvm' name='mpc8255_hip4'/>
++  <cpu type='kvm' name='mpc8255_hip3'/>
++  <cpu type='kvm' name='mpc8255'/>
++  <cpu type='kvm' name='mpc8250_hip4'/>
++  <cpu type='kvm' name='mpc8250_hip3'/>
++  <cpu type='kvm' name='mpc8250'/>
++  <cpu type='kvm' name='mpc8248'/>
++  <cpu type='kvm' name='mpc8247'/>
++  <cpu type='kvm' name='mpc8245'/>
++  <cpu type='kvm' name='mpc8241'/>
++  <cpu type='kvm' name='powerquicc-ii'/>
++  <cpu type='kvm' name='mpc82xx'/>
++  <cpu type='kvm' name='mpc5200b'/>
++  <cpu type='kvm' name='mpc5200'/>
++  <cpu type='kvm' name='mpc52xx'/>
++  <cpu type='kvm' name='mpc8240'/>
++  <cpu type='kvm' name='460ex'/>
++  <cpu type='kvm' name='440ep'/>
++  <cpu type='kvm' name='x2vp50'/>
++  <cpu type='kvm' name='x2vp7'/>
++  <cpu type='kvm' name='405gpe'/>
++  <cpu type='kvm' name='405gp'/>
++  <cpu type='kvm' name='405cr'/>
++  <cpu type='kvm' name='405'/>
++  <cpu type='kvm' name='403'/>
++  <cpu type='kvm' name='mpc8547e_v21'/>
++  <cpu type='kvm' name='750cl_v1.0'/>
++  <cpu type='kvm' name='7457a_v1.1'/>
++  <cpu type='kvm' name='g2gp'/>
++  <cpu type='kvm' name='750cxe_v2.1'/>
++  <cpu type='kvm' name='755_v2.7'/>
++  <cpu type='kvm' name='750_v2.1'/>
++  <cpu type='kvm' name='755_v2.2'/>
++  <cpu type='kvm' name='745_v2.0'/>
++  <cpu type='kvm' name='mpc8377'/>
++  <cpu type='kvm' name='7455_v1.0'/>
++  <cpu type='kvm' name='mpc8545_v21'/>
++  <cpu type='kvm' name='mpc8548_v11'/>
++  <cpu type='kvm' name='405d4'/>
++  <cpu type='kvm' name='g2le'/>
++  <cpu type='kvm' name='g2hip3'/>
++  <cpu type='kvm' name='750e'/>
++  <cpu type='kvm' name='mpc8572'/>
++  <cpu type='kvm' name='970fx_v2.0'/>
++  <cpu type='kvm' name='750fx_v2.0'/>
++  <cpu type='kvm' name='603p'/>
++  <cpu type='kvm' name='405gpb'/>
++  <cpu type='kvm' name='7400_v2.7'/>
++  <cpu type='kvm' name='mpc8544e_v10'/>
++  <cpu type='kvm' name='e500v2_v10'/>
++  <cpu type='kvm' name='e500mc'/>
++  <cpu type='kvm' name='603e7v1'/>
++  <cpu type='kvm' name='970mp_v1.0'/>
++  <cpu type='kvm' name='740e'/>
++  <cpu type='kvm' name='405crc'/>
++  <cpu type='kvm' name='403ga'/>
++  <cpu type='kvm' name='7447a_v1.0'/>
++  <cpu type='kvm' name='7400_v2.2'/>
++  <cpu type='kvm' name='e300c1'/>
++  <cpu type='kvm' name='mpc8572e'/>
++  <cpu type='kvm' name='e500v2_v21'/>
++  <cpu type='kvm' name='970fx_v1.0'/>
++  <cpu type='kvm' name='750gx_v1.2'/>
++  <cpu type='kvm' name='750fx_v1.0'/>
++  <cpu type='kvm' name='7457_v1.1'/>
++  <cpu type='kvm' name='970fx_v3.0'/>
++  <cpu type='kvm' name='604e_v2.2'/>
++  <cpu type='kvm' name='755_v2.6'/>
++  <cpu type='kvm' name='401a1'/>
++  <cpu type='kvm' name='power9_v1.0'/>
++  <cpu type='kvm' name='npe405h'/>
++  <cpu type='kvm' name='g2ls'/>
++  <cpu type='kvm' name='7410_v1.4'/>
++  <cpu type='kvm' name='750_v2.0'/>
++  <cpu type='kvm' name='401b2'/>
++  <cpu type='kvm' name='mpc8349'/>
++  <cpu type='kvm' name='mpc8347ep'/>
++  <cpu type='kvm' name='7445_v3.2'/>
++  <cpu type='kvm' name='mpc8540_v21'/>
++  <cpu type='kvm' name='mpc8543_v11'/>
++  <cpu type='kvm' name='403gcx'/>
++  <cpu type='kvm' name='745_v2.4'/>
++  <cpu type='kvm' name='mpc8548_v21'/>
++  <cpu type='kvm' name='750l_v3.2'/>
++  <cpu type='kvm' name='750_v1.0'/>
++  <cpu type='kvm' name='755_v1.1'/>
++  <cpu type='kvm' name='e500_v10'/>
++  <cpu type='kvm' name='750cxe_v3.0'/>
++  <cpu type='kvm' name='mpc8541e_v10'/>
++  <cpu type='kvm' name='mpc8347p'/>
++  <cpu type='kvm' name='mpc8555e_v10'/>
++  <cpu type='kvm' name='power9_v2.0'/>
++  <cpu type='kvm' name='power7_v2.3'/>
++  <cpu type='kvm' name='603e7v'/>
++  <cpu type='kvm' name='mpc8543e_v11'/>
++  <cpu type='kvm' name='750_v3.0'/>
++  <cpu type='kvm' name='7400_v2.6'/>
++  <cpu type='kvm' name='405gpa'/>
++  <cpu type='kvm' name='440epx'/>
++  <cpu type='kvm' name='750l_v2.2'/>
++  <cpu type='kvm' name='e200z6'/>
++  <cpu type='kvm' name='mpc8547e_v20'/>
++  <cpu type='kvm' name='7457a_v1.0'/>
++  <cpu type='kvm' name='mpc8349ea'/>
++  <cpu type='kvm' name='e500v2_v20'/>
++  <cpu type='kvm' name='power8nvl_v1.0'/>
++  <cpu type='kvm' name='mpc8540_v10'/>
++  <cpu type='kvm' name='755_v2.1'/>
++  <cpu type='kvm' name='745_v2.8'/>
++  <cpu type='kvm' name='npe405l'/>
++  <cpu type='kvm' name='mpc8343ea'/>
++  <cpu type='kvm' name='mpc8545_v20'/>
++  <cpu type='kvm' name='mpc8548_v10'/>
++  <cpu type='kvm' name='7455_v3.4'/>
++  <cpu type='kvm' name='740_v2.2'/>
++  <cpu type='kvm' name='7448_v1.1'/>
++  <cpu type='kvm' name='7400_v1.1'/>
++  <cpu type='kvm' name='mpc8347et'/>
++  <cpu type='kvm' name='7441_v2.10'/>
++  <cpu type='kvm' name='603e_v1.4'/>
++  <cpu type='kvm' name='mpc8543_v10'/>
++  <cpu type='kvm' name='401c2'/>
++  <cpu type='kvm' name='7451_v2.10'/>
++  <cpu type='kvm' name='750cx_v2.2'/>
++  <cpu type='kvm' name='mpc8543_v21'/>
++  <cpu type='kvm' name='603e7'/>
++  <cpu type='kvm' name='7448_v2.1'/>
++  <cpu type='kvm' name='7441_v2.3'/>
++  <cpu type='kvm' name='405crb'/>
++  <cpu type='kvm' name='604'/>
++  <cpu type='kvm' name='7400_v2.1'/>
++  <cpu type='kvm' name='440-xilinx-w-dfpu'/>
++  <cpu type='kvm' name='7445_v2.1'/>
++  <cpu type='kvm' name='cobra'/>
++  <cpu type='kvm' name='e500_v20'/>
++  <cpu type='kvm' name='mpc8541_v11'/>
++  <cpu type='kvm' name='750gx_v1.1'/>
++  <cpu type='kvm' name='750cxe_v2.4'/>
++  <cpu type='kvm' name='mpc8641d'/>
++  <cpu type='kvm' name='mpc8543e_v21'/>
++  <cpu type='kvm' name='750l_v2.1'/>
++  <cpu type='kvm' name='7457_v1.0'/>
++  <cpu type='kvm' name='7450_v1.2'/>
++  <cpu type='kvm' name='755_v2.5'/>
++  <cpu type='kvm' name='7410_v1.3'/>
++  <cpu type='kvm' name='745_v2.3'/>
++  <cpu type='kvm' name='755_v2.0'/>
++  <cpu type='kvm' name='e500v2_v30'/>
++  <cpu type='kvm' name='7455_v3.3'/>
++  <cpu type='kvm' name='mpc8540_v20'/>
++  <cpu type='kvm' name='405d2'/>
++  <cpu type='kvm' name='mpc8560_v21'/>
++  <cpu type='kvm' name='mpc8343'/>
++  <cpu type='kvm' name='mpc8548_v20'/>
++  <cpu type='kvm' name='mpc8347t'/>
++  <cpu type='kvm' name='755_v1.0'/>
++  <cpu type='kvm' name='603e_v1.3'/>
++  <cpu type='kvm' name='host'/>
++  <cpu type='kvm' name='mpc8543e_v10'/>
++  <cpu type='kvm' name='mpc8347eap'/>
++  <cpu type='kvm' name='mpc8548e_v11'/>
++  <cpu type='kvm' name='mpc8543_v20'/>
++  <cpu type='kvm' name='401d2'/>
++  <cpu type='kvm' name='power8_v2.0'/>
++  <cpu type='kvm' name='740_v3.1'/>
++  <cpu type='kvm' name='e200z5'/>
++  <cpu type='kvm' name='405cra'/>
++  <cpu type='kvm' name='7400_v2.0'/>
++  <cpu type='kvm' name='750cxe_v2.3'/>
++  <cpu type='kvm' name='745_v2.7'/>
++  <cpu type='kvm' name='mpc8560_v10'/>
++  <cpu type='kvm' name='e5500'/>
++  <cpu type='kvm' name='mpc8544_v11'/>
++  <cpu type='kvm' name='7448_v1.0'/>
++  <cpu type='kvm' name='401e2'/>
++  <cpu type='kvm' name='740_v2.1'/>
++  <cpu type='kvm' name='745_v2.2'/>
++  <cpu type='kvm' name='7400_v1.0'/>
++  <cpu type='kvm' name='7410_v1.2'/>
++  <cpu type='kvm' name='x2vp4'/>
++  <cpu type='kvm' name='mpc8347ap'/>
++  <cpu type='kvm' name='mpc8533_v11'/>
++  <cpu type='kvm' name='mpc5200b_v21'/>
++  <cpu type='kvm' name='750fx_v2.3'/>
++  <cpu type='kvm' name='601_v2'/>
++  <cpu type='kvm' name='g2legp3'/>
++  <cpu type='kvm' name='604e_v1.0'/>
++  <cpu type='kvm' name='750cx_v2.1'/>
++  <cpu type='kvm' name='mpc8610'/>
++  <cpu type='kvm' name='g2h4'/>
++  <cpu type='kvm' name='750l_v3.0'/>
++  <cpu type='kvm' name='mpc8377e'/>
++  <cpu type='kvm' name='e300c4'/>
++  <cpu type='kvm' name='mpc5200_v12'/>
++  <cpu type='kvm' name='7448_v2.0'/>
++  <cpu type='kvm' name='7450_v2.1'/>
++  <cpu type='kvm' name='750cxe_v3.1b'/>
++  <cpu type='kvm' name='g2'/>
++  <cpu type='kvm' name='7400_v2.9'/>
++  <cpu type='kvm' name='405gpd'/>
++  <cpu type='kvm' name='603'/>
++  <cpu type='kvm' name='603e7t'/>
++  <cpu type='kvm' name='mpc8555_v11'/>
++  <cpu type='kvm' name='750gx_v1.0'/>
++  <cpu type='kvm' name='mpc8541_v10'/>
++  <cpu type='kvm' name='mpc8543e_v20'/>
++  <cpu type='kvm' name='750fl'/>
++  <cpu type='kvm' name='750l_v2.0'/>
++  <cpu type='kvm' name='stb04'/>
++  <cpu type='kvm' name='mpc8548e_v21'/>
++  <cpu type='kvm' name='x2vp20'/>
++  <cpu type='kvm' name='405ez'/>
++  <cpu type='kvm' name='e600'/>
++  <cpu type='kvm' name='7450_v1.1'/>
++  <cpu type='kvm' name='755_v2.4'/>
++  <cpu type='kvm' name='mpc8379'/>
++  <cpu type='kvm' name='7445_v1.0'/>
++  <cpu type='kvm' name='7447_v1.1'/>
++  <cpu type='kvm' name='603e_v2.2'/>
++  <cpu type='kvm' name='603e_v4'/>
++  <cpu type='kvm' name='g2legp'/>
++  <cpu type='kvm' name='7455_v3.2'/>
++  <cpu type='kvm' name='740_v2.0'/>
++  <cpu type='kvm' name='mpc8560_v20'/>
++  <cpu type='kvm' name='440-xilinx'/>
++  <cpu type='kvm' name='401f2'/>
++  <cpu type='kvm' name='mpc8533_v10'/>
++  <cpu type='kvm' name='mpc8349a'/>
++  <cpu type='kvm' name='405gpr'/>
++  <cpu type='kvm' name='stb25'/>
++  <cpu type='kvm' name='603e_v1.2'/>
++  <cpu type='kvm' name='mpc5200b_v20'/>
++  <cpu type='kvm' name='750fx_v2.2'/>
++  <cpu type='kvm' name='mpc8347eat'/>
++  <cpu type='kvm' name='740_v1.0'/>
++  <cpu type='kvm' name='601_v1'/>
++  <cpu type='kvm' name='745_v1.1'/>
++  <cpu type='kvm' name='750cx_v2.0'/>
++  <cpu type='kvm' name='mpc8548e_v10'/>
++  <cpu type='kvm' name='7447a_v1.2'/>
++  <cpu type='kvm' name='403gc'/>
++  <cpu type='kvm' name='e300c3'/>
++  <cpu type='kvm' name='mpc5200_v11'/>
++  <cpu type='kvm' name='7441_v2.1'/>
++  <cpu type='kvm' name='740_v3.0'/>
++  <cpu type='kvm' name='mpc8545e_v21'/>
++  <cpu type='kvm' name='602'/>
++  <cpu type='kvm' name='mpc8378e'/>
++  <cpu type='kvm' name='mpc8343a'/>
++  <cpu type='kvm' name='460exb'/>
++  <cpu type='kvm' name='mpc8555_v10'/>
++  <cpu type='kvm' name='mpc8568'/>
++  <cpu type='kvm' name='7457a_v1.2'/>
++  <cpu type='kvm' name='750cx_v1.0'/>
++  <cpu type='kvm' name='750cxe_v2.2'/>
++  <cpu type='kvm' name='604e_v2.4'/>
++  <cpu type='kvm' name='755_v2.8'/>
++  <cpu type='kvm' name='405lp'/>
++  <cpu type='kvm' name='745_v2.6'/>
++  <cpu type='kvm' name='stb03'/>
++  <cpu type='kvm' name='405ep'/>
++  <cpu type='kvm' name='mpc8544_v10'/>
++  <cpu type='kvm' name='mpc8347at'/>
++  <cpu type='kvm' name='750_v2.2'/>
++  <cpu type='kvm' name='7450_v1.0'/>
++  <cpu type='kvm' name='755_v2.3'/>
++  <cpu type='kvm' name='7410_v1.1'/>
++  <cpu type='kvm' name='745_v2.1'/>
++  <cpu type='kvm' name='750gl'/>
++  <cpu type='kvm' name='e6500'/>
++  <cpu type='kvm' name='750p'/>
++  <cpu type='kvm' name='7445_v3.4'/>
++  <cpu type='kvm' name='440epb'/>
++  <cpu type='kvm' name='npe4gs3'/>
++  <cpu type='kvm' name='603e_v3'/>
++  <cpu type='kvm' name='mpc8349e'/>
++  <cpu type='kvm' name='970_v2.2'/>
++  <cpu type='kvm' name='g2lels'/>
++  <cpu type='kvm' name='g2hip4'/>
++  <cpu type='kvm' name='740p'/>
++  <cpu type='kvm' name='mpc8567e'/>
++  <cpu type='kvm' name='mpc8533e_v11'/>
++  <cpu type='kvm' name='7451_v2.3'/>
++  <cpu type='kvm' name='603e_v1.1'/>
++  <cpu type='kvm' name='401g2'/>
++  <cpu type='kvm' name='7400_v2.8'/>
++  <cpu type='kvm' name='7455_v2.1'/>
++  <cpu type='kvm' name='405gpc'/>
++  <cpu type='kvm' name='power7+_v2.1'/>
++  <cpu type='kvm' name='mpc8544e_v11'/>
++  <cpu type='kvm' name='7450_v2.0'/>
++  <cpu type='kvm' name='970mp_v1.1'/>
++  <cpu type='kvm' name='603e7v2'/>
++  <cpu type='kvm' name='604r'/>
++  <cpu type='kvm' name='e500v2_v22'/>
++  <cpu type='kvm' name='mpc8548e_v20'/>
++  <cpu type='kvm' name='mpc8545e_v20'/>
++  <cpu type='kvm' name='mpc8378'/>
++  <cpu type='kvm' name='mpc8567'/>
++  <cpu type='kvm' name='7457_v1.2'/>
++  <cpu type='kvm' name='7447_v1.0'/>
++  <cpu type='kvm' name='970fx_v3.1'/>
++  <cpu type='kvm' name='745_v2.5'/>
++  <cpu type='kvm' name='mpc8379e'/>
++  <cpu type='kvm' name='mpc8641'/>
++  <cpu type='kvm' name='750cxe_v2.4b'/>
++  <cpu type='kvm' name='7410_v1.0'/>
++  <cpu type='kvm' name='mpc603'/>
++  <cpu type='kvm' name='603e_v4.1'/>
++  <cpu type='kvm' name='7445_v3.3'/>
++  <cpu type='kvm' name='440epa'/>
++  <cpu type='kvm' name='970fx_v2.1'/>
++  <cpu type='kvm' name='iop480'/>
++  <cpu type='kvm' name='750fx_v2.1'/>
++  <cpu type='kvm' name='601_v0'/>
++  <cpu type='kvm' name='g2legp1'/>
++  <cpu type='kvm' name='745_v1.0'/>
++  <cpu type='kvm' name='750cl_v2.0'/>
++  <cpu type='kvm' name='750cxr'/>
++  <cpu type='kvm' name='401'/>
++  <cpu type='kvm' name='mpc8541e_v11'/>
++  <cpu type='kvm' name='750cxe_v3.1'/>
++  <cpu type='kvm' name='mpc8555e_v11'/>
++  <cpu type='kvm' name='power8e_v2.1'/>
++  <cpu type='kvm' name='7447a_v1.1'/>
++  <cpu type='kvm' name='403gb'/>
++  <cpu type='kvm' name='e300c2'/>
++  <cpu type='kvm' name='npe405h2'/>
++  <cpu type='kvm' name='mpc8343e'/>
++  <cpu type='kvm' name='mpc8533e_v10'/>
++  <cpu type='kvm' name='mpc5200_v10'/>
++  <cpu type='kvm' name='750_v3.1'/>
++  <cpu type='kvm' name='power5+_v2.1'/>
++  <cpu type='kvm' name='mpc8568e'/>
++  <cpu type='tcg' name='default'/>
++  <cpu type='tcg' name='ppc'/>
++  <cpu type='tcg' name='ppc32'/>
++  <cpu type='tcg' name='ppc64'/>
++  <cpu type='tcg' name='power9'/>
++  <cpu type='tcg' name='power8nvl'/>
++  <cpu type='tcg' name='power8'/>
++  <cpu type='tcg' name='power8e'/>
++  <cpu type='tcg' name='power7+'/>
++  <cpu type='tcg' name='power7'/>
++  <cpu type='tcg' name='power5gs'/>
++  <cpu type='tcg' name='power5+'/>
++  <cpu type='tcg' name='970mp'/>
++  <cpu type='tcg' name='970fx'/>
++  <cpu type='tcg' name='970'/>
++  <cpu type='tcg' name='apollo7pm'/>
++  <cpu type='tcg' name='7457a'/>
++  <cpu type='tcg' name='7447a'/>
++  <cpu type='tcg' name='apollo7'/>
++  <cpu type='tcg' name='7457'/>
++  <cpu type='tcg' name='7447'/>
++  <cpu type='tcg' name='apollo6'/>
++  <cpu type='tcg' name='7455'/>
++  <cpu type='tcg' name='7445'/>
++  <cpu type='tcg' name='7451'/>
++  <cpu type='tcg' name='7441'/>
++  <cpu type='tcg' name='vger'/>
++  <cpu type='tcg' name='7450'/>
++  <cpu type='tcg' name='7448'/>
++  <cpu type='tcg' name='nitro'/>
++  <cpu type='tcg' name='7410'/>
++  <cpu type='tcg' name='g4'/>
++  <cpu type='tcg' name='max'/>
++  <cpu type='tcg' name='7400'/>
++  <cpu type='tcg' name='goldfinger'/>
++  <cpu type='tcg' name='755'/>
++  <cpu type='tcg' name='745'/>
++  <cpu type='tcg' name='lonestar'/>
++  <cpu type='tcg' name='750l'/>
++  <cpu type='tcg' name='750gx'/>
++  <cpu type='tcg' name='750fx'/>
++  <cpu type='tcg' name='750cxe'/>
++  <cpu type='tcg' name='750cx'/>
++  <cpu type='tcg' name='750cl'/>
++  <cpu type='tcg' name='conan/doyle'/>
++  <cpu type='tcg' name='g3'/>
++  <cpu type='tcg' name='typhoon'/>
++  <cpu type='tcg' name='750'/>
++  <cpu type='tcg' name='arthur'/>
++  <cpu type='tcg' name='740'/>
++  <cpu type='tcg' name='mach5'/>
++  <cpu type='tcg' name='sirocco'/>
++  <cpu type='tcg' name='604e'/>
++  <cpu type='tcg' name='goldeneye'/>
++  <cpu type='tcg' name='603r'/>
++  <cpu type='tcg' name='vaillant'/>
++  <cpu type='tcg' name='stretch'/>
++  <cpu type='tcg' name='603e'/>
++  <cpu type='tcg' name='vanilla'/>
++  <cpu type='tcg' name='601v'/>
++  <cpu type='tcg' name='601'/>
++  <cpu type='tcg' name='mpc8560'/>
++  <cpu type='tcg' name='mpc8555e'/>
++  <cpu type='tcg' name='mpc8555'/>
++  <cpu type='tcg' name='mpc8548e'/>
++  <cpu type='tcg' name='mpc8548'/>
++  <cpu type='tcg' name='mpc8547e'/>
++  <cpu type='tcg' name='mpc8545e'/>
++  <cpu type='tcg' name='mpc8545'/>
++  <cpu type='tcg' name='mpc8544e'/>
++  <cpu type='tcg' name='mpc8544'/>
++  <cpu type='tcg' name='mpc8543e'/>
++  <cpu type='tcg' name='mpc8543'/>
++  <cpu type='tcg' name='mpc8541e'/>
++  <cpu type='tcg' name='mpc8541'/>
++  <cpu type='tcg' name='mpc8540'/>
++  <cpu type='tcg' name='mpc8533e'/>
++  <cpu type='tcg' name='mpc8533'/>
++  <cpu type='tcg' name='e500v2'/>
++  <cpu type='tcg' name='e500v1'/>
++  <cpu type='tcg' name='e500'/>
++  <cpu type='tcg' name='mpc8347ea'/>
++  <cpu type='tcg' name='mpc8347e'/>
++  <cpu type='tcg' name='mpc8347a'/>
++  <cpu type='tcg' name='mpc8347'/>
++  <cpu type='tcg' name='e300'/>
++  <cpu type='tcg' name='e200'/>
++  <cpu type='tcg' name='mpc8280'/>
++  <cpu type='tcg' name='mpc8275'/>
++  <cpu type='tcg' name='mpc8272'/>
++  <cpu type='tcg' name='mpc8271'/>
++  <cpu type='tcg' name='mpc8270'/>
++  <cpu type='tcg' name='mpc8266_hip4'/>
++  <cpu type='tcg' name='mpc8266_hip3'/>
++  <cpu type='tcg' name='mpc8266'/>
++  <cpu type='tcg' name='mpc8265_hip4'/>
++  <cpu type='tcg' name='mpc8265_hip3'/>
++  <cpu type='tcg' name='mpc8265'/>
++  <cpu type='tcg' name='mpc8264_hip4'/>
++  <cpu type='tcg' name='mpc8264_hip3'/>
++  <cpu type='tcg' name='mpc8264'/>
++  <cpu type='tcg' name='mpc8260_hip4'/>
++  <cpu type='tcg' name='mpc8260_hip3'/>
++  <cpu type='tcg' name='mpc8260'/>
++  <cpu type='tcg' name='mpc8255_hip4'/>
++  <cpu type='tcg' name='mpc8255_hip3'/>
++  <cpu type='tcg' name='mpc8255'/>
++  <cpu type='tcg' name='mpc8250_hip4'/>
++  <cpu type='tcg' name='mpc8250_hip3'/>
++  <cpu type='tcg' name='mpc8250'/>
++  <cpu type='tcg' name='mpc8248'/>
++  <cpu type='tcg' name='mpc8247'/>
++  <cpu type='tcg' name='mpc8245'/>
++  <cpu type='tcg' name='mpc8241'/>
++  <cpu type='tcg' name='powerquicc-ii'/>
++  <cpu type='tcg' name='mpc82xx'/>
++  <cpu type='tcg' name='mpc5200b'/>
++  <cpu type='tcg' name='mpc5200'/>
++  <cpu type='tcg' name='mpc52xx'/>
++  <cpu type='tcg' name='mpc8240'/>
++  <cpu type='tcg' name='460ex'/>
++  <cpu type='tcg' name='440ep'/>
++  <cpu type='tcg' name='x2vp50'/>
++  <cpu type='tcg' name='x2vp7'/>
++  <cpu type='tcg' name='405gpe'/>
++  <cpu type='tcg' name='405gp'/>
++  <cpu type='tcg' name='405cr'/>
++  <cpu type='tcg' name='405'/>
++  <cpu type='tcg' name='403'/>
++  <cpu type='tcg' name='mpc8547e_v21'/>
++  <cpu type='tcg' name='750cl_v1.0'/>
++  <cpu type='tcg' name='7457a_v1.1'/>
++  <cpu type='tcg' name='g2gp'/>
++  <cpu type='tcg' name='750cxe_v2.1'/>
++  <cpu type='tcg' name='755_v2.7'/>
++  <cpu type='tcg' name='750_v2.1'/>
++  <cpu type='tcg' name='755_v2.2'/>
++  <cpu type='tcg' name='745_v2.0'/>
++  <cpu type='tcg' name='mpc8377'/>
++  <cpu type='tcg' name='7455_v1.0'/>
++  <cpu type='tcg' name='mpc8545_v21'/>
++  <cpu type='tcg' name='mpc8548_v11'/>
++  <cpu type='tcg' name='405d4'/>
++  <cpu type='tcg' name='g2le'/>
++  <cpu type='tcg' name='g2hip3'/>
++  <cpu type='tcg' name='750e'/>
++  <cpu type='tcg' name='mpc8572'/>
++  <cpu type='tcg' name='970fx_v2.0'/>
++  <cpu type='tcg' name='750fx_v2.0'/>
++  <cpu type='tcg' name='603p'/>
++  <cpu type='tcg' name='405gpb'/>
++  <cpu type='tcg' name='7400_v2.7'/>
++  <cpu type='tcg' name='mpc8544e_v10'/>
++  <cpu type='tcg' name='e500v2_v10'/>
++  <cpu type='tcg' name='e500mc'/>
++  <cpu type='tcg' name='603e7v1'/>
++  <cpu type='tcg' name='970mp_v1.0'/>
++  <cpu type='tcg' name='740e'/>
++  <cpu type='tcg' name='405crc'/>
++  <cpu type='tcg' name='403ga'/>
++  <cpu type='tcg' name='7447a_v1.0'/>
++  <cpu type='tcg' name='7400_v2.2'/>
++  <cpu type='tcg' name='e300c1'/>
++  <cpu type='tcg' name='mpc8572e'/>
++  <cpu type='tcg' name='e500v2_v21'/>
++  <cpu type='tcg' name='970fx_v1.0'/>
++  <cpu type='tcg' name='750gx_v1.2'/>
++  <cpu type='tcg' name='750fx_v1.0'/>
++  <cpu type='tcg' name='7457_v1.1'/>
++  <cpu type='tcg' name='970fx_v3.0'/>
++  <cpu type='tcg' name='604e_v2.2'/>
++  <cpu type='tcg' name='755_v2.6'/>
++  <cpu type='tcg' name='401a1'/>
++  <cpu type='tcg' name='power9_v1.0'/>
++  <cpu type='tcg' name='npe405h'/>
++  <cpu type='tcg' name='g2ls'/>
++  <cpu type='tcg' name='7410_v1.4'/>
++  <cpu type='tcg' name='750_v2.0'/>
++  <cpu type='tcg' name='401b2'/>
++  <cpu type='tcg' name='mpc8349'/>
++  <cpu type='tcg' name='mpc8347ep'/>
++  <cpu type='tcg' name='7445_v3.2'/>
++  <cpu type='tcg' name='mpc8540_v21'/>
++  <cpu type='tcg' name='mpc8543_v11'/>
++  <cpu type='tcg' name='403gcx'/>
++  <cpu type='tcg' name='745_v2.4'/>
++  <cpu type='tcg' name='mpc8548_v21'/>
++  <cpu type='tcg' name='750l_v3.2'/>
++  <cpu type='tcg' name='750_v1.0'/>
++  <cpu type='tcg' name='755_v1.1'/>
++  <cpu type='tcg' name='e500_v10'/>
++  <cpu type='tcg' name='750cxe_v3.0'/>
++  <cpu type='tcg' name='mpc8541e_v10'/>
++  <cpu type='tcg' name='mpc8347p'/>
++  <cpu type='tcg' name='mpc8555e_v10'/>
++  <cpu type='tcg' name='power9_v2.0'/>
++  <cpu type='tcg' name='power7_v2.3'/>
++  <cpu type='tcg' name='603e7v'/>
++  <cpu type='tcg' name='mpc8543e_v11'/>
++  <cpu type='tcg' name='750_v3.0'/>
++  <cpu type='tcg' name='7400_v2.6'/>
++  <cpu type='tcg' name='405gpa'/>
++  <cpu type='tcg' name='440epx'/>
++  <cpu type='tcg' name='750l_v2.2'/>
++  <cpu type='tcg' name='e200z6'/>
++  <cpu type='tcg' name='mpc8547e_v20'/>
++  <cpu type='tcg' name='7457a_v1.0'/>
++  <cpu type='tcg' name='mpc8349ea'/>
++  <cpu type='tcg' name='e500v2_v20'/>
++  <cpu type='tcg' name='power8nvl_v1.0'/>
++  <cpu type='tcg' name='mpc8540_v10'/>
++  <cpu type='tcg' name='755_v2.1'/>
++  <cpu type='tcg' name='745_v2.8'/>
++  <cpu type='tcg' name='npe405l'/>
++  <cpu type='tcg' name='mpc8343ea'/>
++  <cpu type='tcg' name='mpc8545_v20'/>
++  <cpu type='tcg' name='mpc8548_v10'/>
++  <cpu type='tcg' name='7455_v3.4'/>
++  <cpu type='tcg' name='740_v2.2'/>
++  <cpu type='tcg' name='7448_v1.1'/>
++  <cpu type='tcg' name='7400_v1.1'/>
++  <cpu type='tcg' name='mpc8347et'/>
++  <cpu type='tcg' name='7441_v2.10'/>
++  <cpu type='tcg' name='603e_v1.4'/>
++  <cpu type='tcg' name='mpc8543_v10'/>
++  <cpu type='tcg' name='401c2'/>
++  <cpu type='tcg' name='7451_v2.10'/>
++  <cpu type='tcg' name='750cx_v2.2'/>
++  <cpu type='tcg' name='mpc8543_v21'/>
++  <cpu type='tcg' name='603e7'/>
++  <cpu type='tcg' name='7448_v2.1'/>
++  <cpu type='tcg' name='7441_v2.3'/>
++  <cpu type='tcg' name='405crb'/>
++  <cpu type='tcg' name='604'/>
++  <cpu type='tcg' name='7400_v2.1'/>
++  <cpu type='tcg' name='440-xilinx-w-dfpu'/>
++  <cpu type='tcg' name='7445_v2.1'/>
++  <cpu type='tcg' name='cobra'/>
++  <cpu type='tcg' name='e500_v20'/>
++  <cpu type='tcg' name='mpc8541_v11'/>
++  <cpu type='tcg' name='750gx_v1.1'/>
++  <cpu type='tcg' name='750cxe_v2.4'/>
++  <cpu type='tcg' name='mpc8641d'/>
++  <cpu type='tcg' name='mpc8543e_v21'/>
++  <cpu type='tcg' name='750l_v2.1'/>
++  <cpu type='tcg' name='7457_v1.0'/>
++  <cpu type='tcg' name='7450_v1.2'/>
++  <cpu type='tcg' name='755_v2.5'/>
++  <cpu type='tcg' name='7410_v1.3'/>
++  <cpu type='tcg' name='745_v2.3'/>
++  <cpu type='tcg' name='755_v2.0'/>
++  <cpu type='tcg' name='e500v2_v30'/>
++  <cpu type='tcg' name='7455_v3.3'/>
++  <cpu type='tcg' name='mpc8540_v20'/>
++  <cpu type='tcg' name='405d2'/>
++  <cpu type='tcg' name='mpc8560_v21'/>
++  <cpu type='tcg' name='mpc8343'/>
++  <cpu type='tcg' name='mpc8548_v20'/>
++  <cpu type='tcg' name='mpc8347t'/>
++  <cpu type='tcg' name='755_v1.0'/>
++  <cpu type='tcg' name='603e_v1.3'/>
++  <cpu type='tcg' name='mpc8543e_v10'/>
++  <cpu type='tcg' name='mpc8347eap'/>
++  <cpu type='tcg' name='mpc8548e_v11'/>
++  <cpu type='tcg' name='mpc8543_v20'/>
++  <cpu type='tcg' name='401d2'/>
++  <cpu type='tcg' name='power8_v2.0'/>
++  <cpu type='tcg' name='740_v3.1'/>
++  <cpu type='tcg' name='e200z5'/>
++  <cpu type='tcg' name='405cra'/>
++  <cpu type='tcg' name='7400_v2.0'/>
++  <cpu type='tcg' name='750cxe_v2.3'/>
++  <cpu type='tcg' name='745_v2.7'/>
++  <cpu type='tcg' name='mpc8560_v10'/>
++  <cpu type='tcg' name='e5500'/>
++  <cpu type='tcg' name='mpc8544_v11'/>
++  <cpu type='tcg' name='7448_v1.0'/>
++  <cpu type='tcg' name='401e2'/>
++  <cpu type='tcg' name='740_v2.1'/>
++  <cpu type='tcg' name='745_v2.2'/>
++  <cpu type='tcg' name='7400_v1.0'/>
++  <cpu type='tcg' name='7410_v1.2'/>
++  <cpu type='tcg' name='x2vp4'/>
++  <cpu type='tcg' name='mpc8347ap'/>
++  <cpu type='tcg' name='mpc8533_v11'/>
++  <cpu type='tcg' name='mpc5200b_v21'/>
++  <cpu type='tcg' name='750fx_v2.3'/>
++  <cpu type='tcg' name='601_v2'/>
++  <cpu type='tcg' name='g2legp3'/>
++  <cpu type='tcg' name='604e_v1.0'/>
++  <cpu type='tcg' name='750cx_v2.1'/>
++  <cpu type='tcg' name='mpc8610'/>
++  <cpu type='tcg' name='g2h4'/>
++  <cpu type='tcg' name='750l_v3.0'/>
++  <cpu type='tcg' name='mpc8377e'/>
++  <cpu type='tcg' name='e300c4'/>
++  <cpu type='tcg' name='mpc5200_v12'/>
++  <cpu type='tcg' name='7448_v2.0'/>
++  <cpu type='tcg' name='7450_v2.1'/>
++  <cpu type='tcg' name='750cxe_v3.1b'/>
++  <cpu type='tcg' name='g2'/>
++  <cpu type='tcg' name='7400_v2.9'/>
++  <cpu type='tcg' name='405gpd'/>
++  <cpu type='tcg' name='603'/>
++  <cpu type='tcg' name='603e7t'/>
++  <cpu type='tcg' name='mpc8555_v11'/>
++  <cpu type='tcg' name='750gx_v1.0'/>
++  <cpu type='tcg' name='mpc8541_v10'/>
++  <cpu type='tcg' name='mpc8543e_v20'/>
++  <cpu type='tcg' name='750fl'/>
++  <cpu type='tcg' name='750l_v2.0'/>
++  <cpu type='tcg' name='stb04'/>
++  <cpu type='tcg' name='mpc8548e_v21'/>
++  <cpu type='tcg' name='x2vp20'/>
++  <cpu type='tcg' name='405ez'/>
++  <cpu type='tcg' name='e600'/>
++  <cpu type='tcg' name='7450_v1.1'/>
++  <cpu type='tcg' name='755_v2.4'/>
++  <cpu type='tcg' name='mpc8379'/>
++  <cpu type='tcg' name='7445_v1.0'/>
++  <cpu type='tcg' name='7447_v1.1'/>
++  <cpu type='tcg' name='603e_v2.2'/>
++  <cpu type='tcg' name='603e_v4'/>
++  <cpu type='tcg' name='g2legp'/>
++  <cpu type='tcg' name='7455_v3.2'/>
++  <cpu type='tcg' name='740_v2.0'/>
++  <cpu type='tcg' name='mpc8560_v20'/>
++  <cpu type='tcg' name='440-xilinx'/>
++  <cpu type='tcg' name='401f2'/>
++  <cpu type='tcg' name='mpc8533_v10'/>
++  <cpu type='tcg' name='mpc8349a'/>
++  <cpu type='tcg' name='405gpr'/>
++  <cpu type='tcg' name='stb25'/>
++  <cpu type='tcg' name='603e_v1.2'/>
++  <cpu type='tcg' name='mpc5200b_v20'/>
++  <cpu type='tcg' name='750fx_v2.2'/>
++  <cpu type='tcg' name='mpc8347eat'/>
++  <cpu type='tcg' name='740_v1.0'/>
++  <cpu type='tcg' name='601_v1'/>
++  <cpu type='tcg' name='745_v1.1'/>
++  <cpu type='tcg' name='750cx_v2.0'/>
++  <cpu type='tcg' name='mpc8548e_v10'/>
++  <cpu type='tcg' name='7447a_v1.2'/>
++  <cpu type='tcg' name='403gc'/>
++  <cpu type='tcg' name='e300c3'/>
++  <cpu type='tcg' name='mpc5200_v11'/>
++  <cpu type='tcg' name='7441_v2.1'/>
++  <cpu type='tcg' name='740_v3.0'/>
++  <cpu type='tcg' name='mpc8545e_v21'/>
++  <cpu type='tcg' name='602'/>
++  <cpu type='tcg' name='mpc8378e'/>
++  <cpu type='tcg' name='mpc8343a'/>
++  <cpu type='tcg' name='460exb'/>
++  <cpu type='tcg' name='mpc8555_v10'/>
++  <cpu type='tcg' name='mpc8568'/>
++  <cpu type='tcg' name='7457a_v1.2'/>
++  <cpu type='tcg' name='750cx_v1.0'/>
++  <cpu type='tcg' name='750cxe_v2.2'/>
++  <cpu type='tcg' name='604e_v2.4'/>
++  <cpu type='tcg' name='755_v2.8'/>
++  <cpu type='tcg' name='405lp'/>
++  <cpu type='tcg' name='745_v2.6'/>
++  <cpu type='tcg' name='stb03'/>
++  <cpu type='tcg' name='405ep'/>
++  <cpu type='tcg' name='mpc8544_v10'/>
++  <cpu type='tcg' name='mpc8347at'/>
++  <cpu type='tcg' name='750_v2.2'/>
++  <cpu type='tcg' name='7450_v1.0'/>
++  <cpu type='tcg' name='755_v2.3'/>
++  <cpu type='tcg' name='7410_v1.1'/>
++  <cpu type='tcg' name='745_v2.1'/>
++  <cpu type='tcg' name='750gl'/>
++  <cpu type='tcg' name='e6500'/>
++  <cpu type='tcg' name='750p'/>
++  <cpu type='tcg' name='7445_v3.4'/>
++  <cpu type='tcg' name='440epb'/>
++  <cpu type='tcg' name='npe4gs3'/>
++  <cpu type='tcg' name='603e_v3'/>
++  <cpu type='tcg' name='mpc8349e'/>
++  <cpu type='tcg' name='970_v2.2'/>
++  <cpu type='tcg' name='g2lels'/>
++  <cpu type='tcg' name='g2hip4'/>
++  <cpu type='tcg' name='740p'/>
++  <cpu type='tcg' name='mpc8567e'/>
++  <cpu type='tcg' name='mpc8533e_v11'/>
++  <cpu type='tcg' name='7451_v2.3'/>
++  <cpu type='tcg' name='603e_v1.1'/>
++  <cpu type='tcg' name='401g2'/>
++  <cpu type='tcg' name='7400_v2.8'/>
++  <cpu type='tcg' name='7455_v2.1'/>
++  <cpu type='tcg' name='405gpc'/>
++  <cpu type='tcg' name='power7+_v2.1'/>
++  <cpu type='tcg' name='mpc8544e_v11'/>
++  <cpu type='tcg' name='7450_v2.0'/>
++  <cpu type='tcg' name='970mp_v1.1'/>
++  <cpu type='tcg' name='603e7v2'/>
++  <cpu type='tcg' name='604r'/>
++  <cpu type='tcg' name='e500v2_v22'/>
++  <cpu type='tcg' name='mpc8548e_v20'/>
++  <cpu type='tcg' name='mpc8545e_v20'/>
++  <cpu type='tcg' name='mpc8378'/>
++  <cpu type='tcg' name='mpc8567'/>
++  <cpu type='tcg' name='7457_v1.2'/>
++  <cpu type='tcg' name='7447_v1.0'/>
++  <cpu type='tcg' name='970fx_v3.1'/>
++  <cpu type='tcg' name='745_v2.5'/>
++  <cpu type='tcg' name='mpc8379e'/>
++  <cpu type='tcg' name='mpc8641'/>
++  <cpu type='tcg' name='750cxe_v2.4b'/>
++  <cpu type='tcg' name='7410_v1.0'/>
++  <cpu type='tcg' name='mpc603'/>
++  <cpu type='tcg' name='603e_v4.1'/>
++  <cpu type='tcg' name='7445_v3.3'/>
++  <cpu type='tcg' name='440epa'/>
++  <cpu type='tcg' name='970fx_v2.1'/>
++  <cpu type='tcg' name='iop480'/>
++  <cpu type='tcg' name='750fx_v2.1'/>
++  <cpu type='tcg' name='601_v0'/>
++  <cpu type='tcg' name='g2legp1'/>
++  <cpu type='tcg' name='745_v1.0'/>
++  <cpu type='tcg' name='750cl_v2.0'/>
++  <cpu type='tcg' name='750cxr'/>
++  <cpu type='tcg' name='401'/>
++  <cpu type='tcg' name='mpc8541e_v11'/>
++  <cpu type='tcg' name='750cxe_v3.1'/>
++  <cpu type='tcg' name='mpc8555e_v11'/>
++  <cpu type='tcg' name='power8e_v2.1'/>
++  <cpu type='tcg' name='7447a_v1.1'/>
++  <cpu type='tcg' name='403gb'/>
++  <cpu type='tcg' name='e300c2'/>
++  <cpu type='tcg' name='npe405h2'/>
++  <cpu type='tcg' name='mpc8343e'/>
++  <cpu type='tcg' name='mpc8533e_v10'/>
++  <cpu type='tcg' name='mpc5200_v10'/>
++  <cpu type='tcg' name='750_v3.1'/>
++  <cpu type='tcg' name='power5+_v2.1'/>
++  <cpu type='tcg' name='mpc8568e'/>
++  <machine name='pseries-3.1' alias='pseries' hotplugCpus='yes' maxCpus='1024'/>
++  <machine name='ref405ep' maxCpus='1'/>
++  <machine name='sam460ex' maxCpus='1'/>
++  <machine name='virtex-ml507' maxCpus='1'/>
++  <machine name='powernv' maxCpus='2048'/>
++  <machine name='ppce500' maxCpus='32'/>
++  <machine name='mpc8544ds' maxCpus='15'/>
++  <machine name='pseries-2.12-sxxm' hotplugCpus='yes' maxCpus='1024'/>
++  <machine name='bamboo' maxCpus='1'/>
++  <machine name='g3beige' maxCpus='1'/>
++  <machine name='pseries-3.0' hotplugCpus='yes' maxCpus='1024'/>
++  <machine name='pseries-2.10' hotplugCpus='yes' maxCpus='1024'/>
++  <machine name='prep' maxCpus='1'/>
++  <machine name='pseries-2.11' hotplugCpus='yes' maxCpus='1024'/>
++  <machine name='pseries-2.12' hotplugCpus='yes' maxCpus='1024'/>
++  <machine name='pseries-2.9' hotplugCpus='yes' maxCpus='1024'/>
++  <machine name='mac99' maxCpus='1'/>
++  <machine name='pseries-2.6' maxCpus='1024'/>
++  <machine name='pseries-2.7' hotplugCpus='yes' maxCpus='1024'/>
++  <machine name='pseries-2.8' hotplugCpus='yes' maxCpus='1024'/>
++  <machine name='pseries-2.4' maxCpus='1024'/>
++  <machine name='pseries-2.5' maxCpus='1024'/>
++  <machine name='pseries-2.2' maxCpus='1024'/>
++  <machine name='taihu' maxCpus='1'/>
++  <machine name='pseries-2.3' maxCpus='1024'/>
++  <machine name='pseries-2.1' maxCpus='1024'/>
++  <machine name='40p' maxCpus='1'/>
++</qemuCaps>
+diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c
+index 828e3d106c..ccc4e45817 100644
+--- a/tests/qemucapabilitiestest.c
++++ b/tests/qemucapabilitiestest.c
+@@ -186,6 +186,7 @@ mymain(void)
+     DO_TEST("ppc64", "caps_2.10.0");
+     DO_TEST("ppc64", "caps_2.12.0");
+     DO_TEST("ppc64", "caps_3.0.0");
++    DO_TEST("ppc64", "caps_3.1.0");
+     DO_TEST("s390x", "caps_2.7.0");
+     DO_TEST("s390x", "caps_2.8.0");
+     DO_TEST("s390x", "caps_2.9.0");
+diff --git a/tests/qemucaps2xmloutdata/caps_3.1.0.ppc64.xml b/tests/qemucaps2xmloutdata/caps_3.1.0.ppc64.xml
+new file mode 100644
+index 0000000000..74eaf3ba0e
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_3.1.0.ppc64.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>ppc64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='ppc64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmltest.c b/tests/qemucaps2xmltest.c
+index cd951b2bb4..631b6ca2d4 100644
+--- a/tests/qemucaps2xmltest.c
++++ b/tests/qemucaps2xmltest.c
+@@ -210,6 +210,7 @@ mymain(void)
+     DO_TEST("ppc64", "caps_2.10.0");
+     DO_TEST("ppc64", "caps_2.12.0");
+     DO_TEST("ppc64", "caps_3.0.0");
++    DO_TEST("ppc64", "caps_3.1.0");
+     DO_TEST("s390x", "caps_2.7.0");
+     DO_TEST("s390x", "caps_2.8.0");
+     DO_TEST("s390x", "caps_2.9.0");
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-tests-Add-linux-high-ids-test.patch b/SOURCES/libvirt-tests-Add-linux-high-ids-test.patch
new file mode 100644
index 0000000..dbc1fea
--- /dev/null
+++ b/SOURCES/libvirt-tests-Add-linux-high-ids-test.patch
@@ -0,0 +1,1112 @@
+From d33bc0f72c87fbc0ac0cf4b56c2a62b552f6c6b0 Mon Sep 17 00:00:00 2001
+Message-Id: <d33bc0f72c87fbc0ac0cf4b56c2a62b552f6c6b0@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Wed, 15 Aug 2018 14:04:44 +0200
+Subject: [PATCH] tests: Add linux-high-ids test
+
+This proves libvirt can now handle high socket_id and
+core_id values correctly and ensures we won't introduce
+regressions in this area.
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit 1df3fb7ccbba938aed4ce43ff3ea10f8eec1490c)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1608479
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ .../linux-aarch64-high-ids.cpuinfo            | 143 ++++++++++++++++++
+ .../linux-aarch64-high-ids.expected           |   1 +
+ .../linux-high-ids/cpu/cpu0/online            |   1 +
+ .../linux-high-ids/cpu/cpu0/topology/core_id  |   1 +
+ .../cpu/cpu0/topology/core_siblings_list      |   1 +
+ .../cpu/cpu0/topology/physical_package_id     |   1 +
+ .../cpu/cpu0/topology/thread_siblings_list    |   1 +
+ .../linux-high-ids/cpu/cpu1/online            |   1 +
+ .../linux-high-ids/cpu/cpu1/topology/core_id  |   1 +
+ .../cpu/cpu1/topology/core_siblings_list      |   1 +
+ .../cpu/cpu1/topology/physical_package_id     |   1 +
+ .../cpu/cpu1/topology/thread_siblings_list    |   1 +
+ .../linux-high-ids/cpu/cpu10/online           |   1 +
+ .../linux-high-ids/cpu/cpu10/topology/core_id |   1 +
+ .../cpu/cpu10/topology/core_siblings_list     |   1 +
+ .../cpu/cpu10/topology/physical_package_id    |   1 +
+ .../cpu/cpu10/topology/thread_siblings_list   |   1 +
+ .../linux-high-ids/cpu/cpu11/online           |   1 +
+ .../linux-high-ids/cpu/cpu11/topology/core_id |   1 +
+ .../cpu/cpu11/topology/core_siblings_list     |   1 +
+ .../cpu/cpu11/topology/physical_package_id    |   1 +
+ .../cpu/cpu11/topology/thread_siblings_list   |   1 +
+ .../linux-high-ids/cpu/cpu12/online           |   1 +
+ .../linux-high-ids/cpu/cpu12/topology/core_id |   1 +
+ .../cpu/cpu12/topology/core_siblings_list     |   1 +
+ .../cpu/cpu12/topology/physical_package_id    |   1 +
+ .../cpu/cpu12/topology/thread_siblings_list   |   1 +
+ .../linux-high-ids/cpu/cpu13/online           |   1 +
+ .../linux-high-ids/cpu/cpu13/topology/core_id |   1 +
+ .../cpu/cpu13/topology/core_siblings_list     |   1 +
+ .../cpu/cpu13/topology/physical_package_id    |   1 +
+ .../cpu/cpu13/topology/thread_siblings_list   |   1 +
+ .../linux-high-ids/cpu/cpu14/online           |   1 +
+ .../linux-high-ids/cpu/cpu14/topology/core_id |   1 +
+ .../cpu/cpu14/topology/core_siblings_list     |   1 +
+ .../cpu/cpu14/topology/physical_package_id    |   1 +
+ .../cpu/cpu14/topology/thread_siblings_list   |   1 +
+ .../linux-high-ids/cpu/cpu15/online           |   1 +
+ .../linux-high-ids/cpu/cpu15/topology/core_id |   1 +
+ .../cpu/cpu15/topology/core_siblings_list     |   1 +
+ .../cpu/cpu15/topology/physical_package_id    |   1 +
+ .../cpu/cpu15/topology/thread_siblings_list   |   1 +
+ .../linux-high-ids/cpu/cpu2/online            |   1 +
+ .../linux-high-ids/cpu/cpu2/topology/core_id  |   1 +
+ .../cpu/cpu2/topology/core_siblings_list      |   1 +
+ .../cpu/cpu2/topology/physical_package_id     |   1 +
+ .../cpu/cpu2/topology/thread_siblings_list    |   1 +
+ .../linux-high-ids/cpu/cpu3/online            |   1 +
+ .../linux-high-ids/cpu/cpu3/topology/core_id  |   1 +
+ .../cpu/cpu3/topology/core_siblings_list      |   1 +
+ .../cpu/cpu3/topology/physical_package_id     |   1 +
+ .../cpu/cpu3/topology/thread_siblings_list    |   1 +
+ .../linux-high-ids/cpu/cpu4/online            |   1 +
+ .../linux-high-ids/cpu/cpu4/topology/core_id  |   1 +
+ .../cpu/cpu4/topology/core_siblings_list      |   1 +
+ .../cpu/cpu4/topology/physical_package_id     |   1 +
+ .../cpu/cpu4/topology/thread_siblings_list    |   1 +
+ .../linux-high-ids/cpu/cpu5/online            |   1 +
+ .../linux-high-ids/cpu/cpu5/topology/core_id  |   1 +
+ .../cpu/cpu5/topology/core_siblings_list      |   1 +
+ .../cpu/cpu5/topology/physical_package_id     |   1 +
+ .../cpu/cpu5/topology/thread_siblings_list    |   1 +
+ .../linux-high-ids/cpu/cpu6/online            |   1 +
+ .../linux-high-ids/cpu/cpu6/topology/core_id  |   1 +
+ .../cpu/cpu6/topology/core_siblings_list      |   1 +
+ .../cpu/cpu6/topology/physical_package_id     |   1 +
+ .../cpu/cpu6/topology/thread_siblings_list    |   1 +
+ .../linux-high-ids/cpu/cpu7/online            |   1 +
+ .../linux-high-ids/cpu/cpu7/topology/core_id  |   1 +
+ .../cpu/cpu7/topology/core_siblings_list      |   1 +
+ .../cpu/cpu7/topology/physical_package_id     |   1 +
+ .../cpu/cpu7/topology/thread_siblings_list    |   1 +
+ .../linux-high-ids/cpu/cpu8/online            |   1 +
+ .../linux-high-ids/cpu/cpu8/topology/core_id  |   1 +
+ .../cpu/cpu8/topology/core_siblings_list      |   1 +
+ .../cpu/cpu8/topology/physical_package_id     |   1 +
+ .../cpu/cpu8/topology/thread_siblings_list    |   1 +
+ .../linux-high-ids/cpu/cpu9/online            |   1 +
+ .../linux-high-ids/cpu/cpu9/topology/core_id  |   1 +
+ .../cpu/cpu9/topology/core_siblings_list      |   1 +
+ .../cpu/cpu9/topology/physical_package_id     |   1 +
+ .../cpu/cpu9/topology/thread_siblings_list    |   1 +
+ .../virhostcpudata/linux-high-ids/cpu/online  |   1 +
+ .../virhostcpudata/linux-high-ids/cpu/present |   1 +
+ .../linux-high-ids/node/node0/cpu0            |   1 +
+ .../linux-high-ids/node/node0/cpu1            |   1 +
+ .../linux-high-ids/node/node0/cpu2            |   1 +
+ .../linux-high-ids/node/node0/cpu3            |   1 +
+ .../linux-high-ids/node/node0/cpu4            |   1 +
+ .../linux-high-ids/node/node0/cpu5            |   1 +
+ .../linux-high-ids/node/node0/cpu6            |   1 +
+ .../linux-high-ids/node/node0/cpu7            |   1 +
+ .../linux-high-ids/node/node0/cpulist         |   1 +
+ .../linux-high-ids/node/node1/cpu10           |   1 +
+ .../linux-high-ids/node/node1/cpu11           |   1 +
+ .../linux-high-ids/node/node1/cpu12           |   1 +
+ .../linux-high-ids/node/node1/cpu13           |   1 +
+ .../linux-high-ids/node/node1/cpu14           |   1 +
+ .../linux-high-ids/node/node1/cpu15           |   1 +
+ .../linux-high-ids/node/node1/cpu8            |   1 +
+ .../linux-high-ids/node/node1/cpu9            |   1 +
+ .../linux-high-ids/node/node1/cpulist         |   1 +
+ tests/virhostcputest.c                        |   1 +
+ 103 files changed, 245 insertions(+)
+ create mode 100644 tests/virhostcpudata/linux-aarch64-high-ids.cpuinfo
+ create mode 100644 tests/virhostcpudata/linux-aarch64-high-ids.expected
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu0/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu1/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu10/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu11/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu12/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu13/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu14/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu15/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu2/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu3/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu4/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu5/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu6/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu7/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu8/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu9/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/core_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/core_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/physical_package_id
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/online
+ create mode 100644 tests/virhostcpudata/linux-high-ids/cpu/present
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node0/cpu0
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node0/cpu1
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node0/cpu2
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node0/cpu3
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node0/cpu4
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node0/cpu5
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node0/cpu6
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node0/cpu7
+ create mode 100644 tests/virhostcpudata/linux-high-ids/node/node0/cpulist
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node1/cpu10
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node1/cpu11
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node1/cpu12
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node1/cpu13
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node1/cpu14
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node1/cpu15
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node1/cpu8
+ create mode 120000 tests/virhostcpudata/linux-high-ids/node/node1/cpu9
+ create mode 100644 tests/virhostcpudata/linux-high-ids/node/node1/cpulist
+
+diff --git a/tests/virhostcpudata/linux-aarch64-high-ids.cpuinfo b/tests/virhostcpudata/linux-aarch64-high-ids.cpuinfo
+new file mode 100644
+index 0000000000..a1ba0ebd73
+--- /dev/null
++++ b/tests/virhostcpudata/linux-aarch64-high-ids.cpuinfo
+@@ -0,0 +1,143 @@
++processor	: 0
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 1
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 2
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 3
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 4
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 5
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 6
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 7
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 8
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 9
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 10
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 11
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 12
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 13
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 14
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
++
++processor	: 15
++BogoMIPS	: 100.00
++Features	: fp asimd evtstrm cpuid
++CPU implementer	: 0x50
++CPU architecture: 8
++CPU variant	: 0x0
++CPU part	: 0x000
++CPU revision	: 1
+diff --git a/tests/virhostcpudata/linux-aarch64-high-ids.expected b/tests/virhostcpudata/linux-aarch64-high-ids.expected
+new file mode 100644
+index 0000000000..27311eaf61
+--- /dev/null
++++ b/tests/virhostcpudata/linux-aarch64-high-ids.expected
+@@ -0,0 +1 @@
++CPUs: 16/16, MHz: 0, Nodes: 2, Sockets: 2, Cores: 2, Threads: 2
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu0/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu0/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu0/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/core_id
+new file mode 100644
+index 0000000000..b6ac305674
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/core_id
+@@ -0,0 +1 @@
++2047
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/core_siblings_list
+new file mode 100644
+index 0000000000..40c7bb2f1a
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/core_siblings_list
+@@ -0,0 +1 @@
++0-3
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/physical_package_id
+new file mode 100644
+index 0000000000..b6ac305674
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/physical_package_id
+@@ -0,0 +1 @@
++2047
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..8b0fab869c
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu0/topology/thread_siblings_list
+@@ -0,0 +1 @@
++0-1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu1/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu1/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu1/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/core_id
+new file mode 100644
+index 0000000000..b6ac305674
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/core_id
+@@ -0,0 +1 @@
++2047
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/core_siblings_list
+new file mode 100644
+index 0000000000..40c7bb2f1a
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/core_siblings_list
+@@ -0,0 +1 @@
++0-3
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/physical_package_id
+new file mode 100644
+index 0000000000..b6ac305674
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/physical_package_id
+@@ -0,0 +1 @@
++2047
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..8b0fab869c
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu1/topology/thread_siblings_list
+@@ -0,0 +1 @@
++0-1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu10/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu10/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu10/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/core_id
+new file mode 100644
+index 0000000000..50b0f79069
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/core_id
+@@ -0,0 +1 @@
++4095
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/core_siblings_list
+new file mode 100644
+index 0000000000..6ae44fb498
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/core_siblings_list
+@@ -0,0 +1 @@
++8-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/physical_package_id
+new file mode 100644
+index 0000000000..3ad7f7faf5
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/physical_package_id
+@@ -0,0 +1 @@
++6143
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..ac93dc4496
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu10/topology/thread_siblings_list
+@@ -0,0 +1 @@
++10-11
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu11/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu11/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu11/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/core_id
+new file mode 100644
+index 0000000000..50b0f79069
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/core_id
+@@ -0,0 +1 @@
++4095
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/core_siblings_list
+new file mode 100644
+index 0000000000..6ae44fb498
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/core_siblings_list
+@@ -0,0 +1 @@
++8-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/physical_package_id
+new file mode 100644
+index 0000000000..3ad7f7faf5
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/physical_package_id
+@@ -0,0 +1 @@
++6143
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..ac93dc4496
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu11/topology/thread_siblings_list
+@@ -0,0 +1 @@
++10-11
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu12/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu12/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu12/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/core_id
+new file mode 100644
+index 0000000000..3ad7f7faf5
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/core_id
+@@ -0,0 +1 @@
++6143
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/core_siblings_list
+new file mode 100644
+index 0000000000..5b8f3ea33e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/core_siblings_list
+@@ -0,0 +1 @@
++12-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/physical_package_id
+new file mode 100644
+index 0000000000..2b4009deaf
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/physical_package_id
+@@ -0,0 +1 @@
++8191
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..a36c7a218d
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu12/topology/thread_siblings_list
+@@ -0,0 +1 @@
++12-13
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu13/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu13/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu13/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/core_id
+new file mode 100644
+index 0000000000..3ad7f7faf5
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/core_id
+@@ -0,0 +1 @@
++6143
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/core_siblings_list
+new file mode 100644
+index 0000000000..5b8f3ea33e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/core_siblings_list
+@@ -0,0 +1 @@
++12-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/physical_package_id
+new file mode 100644
+index 0000000000..2b4009deaf
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/physical_package_id
+@@ -0,0 +1 @@
++8191
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..a36c7a218d
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu13/topology/thread_siblings_list
+@@ -0,0 +1 @@
++12-13
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu14/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu14/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu14/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/core_id
+new file mode 100644
+index 0000000000..2b4009deaf
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/core_id
+@@ -0,0 +1 @@
++8191
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/core_siblings_list
+new file mode 100644
+index 0000000000..5b8f3ea33e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/core_siblings_list
+@@ -0,0 +1 @@
++12-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/physical_package_id
+new file mode 100644
+index 0000000000..2b4009deaf
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/physical_package_id
+@@ -0,0 +1 @@
++8191
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..0c53584319
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu14/topology/thread_siblings_list
+@@ -0,0 +1 @@
++14-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu15/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu15/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu15/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/core_id
+new file mode 100644
+index 0000000000..2b4009deaf
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/core_id
+@@ -0,0 +1 @@
++8191
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/core_siblings_list
+new file mode 100644
+index 0000000000..5b8f3ea33e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/core_siblings_list
+@@ -0,0 +1 @@
++12-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/physical_package_id
+new file mode 100644
+index 0000000000..2b4009deaf
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/physical_package_id
+@@ -0,0 +1 @@
++8191
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..0c53584319
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu15/topology/thread_siblings_list
+@@ -0,0 +1 @@
++14-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu2/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu2/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu2/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/core_id
+new file mode 100644
+index 0000000000..50b0f79069
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/core_id
+@@ -0,0 +1 @@
++4095
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/core_siblings_list
+new file mode 100644
+index 0000000000..40c7bb2f1a
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/core_siblings_list
+@@ -0,0 +1 @@
++0-3
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/physical_package_id
+new file mode 100644
+index 0000000000..b6ac305674
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/physical_package_id
+@@ -0,0 +1 @@
++2047
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..7a9857542a
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu2/topology/thread_siblings_list
+@@ -0,0 +1 @@
++2-3
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu3/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu3/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu3/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/core_id
+new file mode 100644
+index 0000000000..50b0f79069
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/core_id
+@@ -0,0 +1 @@
++4095
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/core_siblings_list
+new file mode 100644
+index 0000000000..40c7bb2f1a
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/core_siblings_list
+@@ -0,0 +1 @@
++0-3
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/physical_package_id
+new file mode 100644
+index 0000000000..b6ac305674
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/physical_package_id
+@@ -0,0 +1 @@
++2047
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..7a9857542a
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu3/topology/thread_siblings_list
+@@ -0,0 +1 @@
++2-3
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu4/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu4/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu4/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/core_id
+new file mode 100644
+index 0000000000..b6ac305674
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/core_id
+@@ -0,0 +1 @@
++2047
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/core_siblings_list
+new file mode 100644
+index 0000000000..93fccd3cc6
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/core_siblings_list
+@@ -0,0 +1 @@
++4-7
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/physical_package_id
+new file mode 100644
+index 0000000000..50b0f79069
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/physical_package_id
+@@ -0,0 +1 @@
++4095
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..e66d883ade
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu4/topology/thread_siblings_list
+@@ -0,0 +1 @@
++4-5
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu5/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu5/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu5/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/core_id
+new file mode 100644
+index 0000000000..b6ac305674
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/core_id
+@@ -0,0 +1 @@
++2047
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/core_siblings_list
+new file mode 100644
+index 0000000000..93fccd3cc6
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/core_siblings_list
+@@ -0,0 +1 @@
++4-7
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/physical_package_id
+new file mode 100644
+index 0000000000..50b0f79069
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/physical_package_id
+@@ -0,0 +1 @@
++4095
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..e66d883ade
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu5/topology/thread_siblings_list
+@@ -0,0 +1 @@
++4-5
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu6/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu6/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu6/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/core_id
+new file mode 100644
+index 0000000000..50b0f79069
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/core_id
+@@ -0,0 +1 @@
++4095
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/core_siblings_list
+new file mode 100644
+index 0000000000..93fccd3cc6
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/core_siblings_list
+@@ -0,0 +1 @@
++4-7
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/physical_package_id
+new file mode 100644
+index 0000000000..50b0f79069
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/physical_package_id
+@@ -0,0 +1 @@
++4095
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..fdd9f37517
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu6/topology/thread_siblings_list
+@@ -0,0 +1 @@
++6-7
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu7/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu7/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu7/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/core_id
+new file mode 100644
+index 0000000000..50b0f79069
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/core_id
+@@ -0,0 +1 @@
++4095
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/core_siblings_list
+new file mode 100644
+index 0000000000..93fccd3cc6
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/core_siblings_list
+@@ -0,0 +1 @@
++4-7
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/physical_package_id
+new file mode 100644
+index 0000000000..50b0f79069
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/physical_package_id
+@@ -0,0 +1 @@
++4095
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..fdd9f37517
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu7/topology/thread_siblings_list
+@@ -0,0 +1 @@
++6-7
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu8/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu8/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu8/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/core_id
+new file mode 100644
+index 0000000000..b6ac305674
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/core_id
+@@ -0,0 +1 @@
++2047
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/core_siblings_list
+new file mode 100644
+index 0000000000..6ae44fb498
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/core_siblings_list
+@@ -0,0 +1 @@
++8-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/physical_package_id
+new file mode 100644
+index 0000000000..3ad7f7faf5
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/physical_package_id
+@@ -0,0 +1 @@
++6143
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..63edceec1e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu8/topology/thread_siblings_list
+@@ -0,0 +1 @@
++8-9
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu9/online b/tests/virhostcpudata/linux-high-ids/cpu/cpu9/online
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu9/online
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/core_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/core_id
+new file mode 100644
+index 0000000000..b6ac305674
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/core_id
+@@ -0,0 +1 @@
++2047
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/core_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/core_siblings_list
+new file mode 100644
+index 0000000000..6ae44fb498
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/core_siblings_list
+@@ -0,0 +1 @@
++8-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/physical_package_id b/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/physical_package_id
+new file mode 100644
+index 0000000000..3ad7f7faf5
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/physical_package_id
+@@ -0,0 +1 @@
++6143
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/thread_siblings_list b/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..63edceec1e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/cpu9/topology/thread_siblings_list
+@@ -0,0 +1 @@
++8-9
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/online b/tests/virhostcpudata/linux-high-ids/cpu/online
+new file mode 100644
+index 0000000000..580a385a1d
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/online
+@@ -0,0 +1 @@
++0-15
+diff --git a/tests/virhostcpudata/linux-high-ids/cpu/present b/tests/virhostcpudata/linux-high-ids/cpu/present
+new file mode 100644
+index 0000000000..580a385a1d
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/cpu/present
+@@ -0,0 +1 @@
++0-15
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node0/cpu0 b/tests/virhostcpudata/linux-high-ids/node/node0/cpu0
+new file mode 120000
+index 0000000000..c841bea28b
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node0/cpu0
+@@ -0,0 +1 @@
++../../cpu/cpu0
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node0/cpu1 b/tests/virhostcpudata/linux-high-ids/node/node0/cpu1
+new file mode 120000
+index 0000000000..5f4536279e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node0/cpu1
+@@ -0,0 +1 @@
++../../cpu/cpu1
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node0/cpu2 b/tests/virhostcpudata/linux-high-ids/node/node0/cpu2
+new file mode 120000
+index 0000000000..2dcca332ce
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node0/cpu2
+@@ -0,0 +1 @@
++../../cpu/cpu2
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node0/cpu3 b/tests/virhostcpudata/linux-high-ids/node/node0/cpu3
+new file mode 120000
+index 0000000000..c7690e5aa6
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node0/cpu3
+@@ -0,0 +1 @@
++../../cpu/cpu3
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node0/cpu4 b/tests/virhostcpudata/linux-high-ids/node/node0/cpu4
+new file mode 120000
+index 0000000000..9e77a64eb4
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node0/cpu4
+@@ -0,0 +1 @@
++../../cpu/cpu4
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node0/cpu5 b/tests/virhostcpudata/linux-high-ids/node/node0/cpu5
+new file mode 120000
+index 0000000000..cc07c3b97b
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node0/cpu5
+@@ -0,0 +1 @@
++../../cpu/cpu5
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node0/cpu6 b/tests/virhostcpudata/linux-high-ids/node/node0/cpu6
+new file mode 120000
+index 0000000000..2e7576354f
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node0/cpu6
+@@ -0,0 +1 @@
++../../cpu/cpu6
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node0/cpu7 b/tests/virhostcpudata/linux-high-ids/node/node0/cpu7
+new file mode 120000
+index 0000000000..09e3f79b43
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node0/cpu7
+@@ -0,0 +1 @@
++../../cpu/cpu7
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node0/cpulist b/tests/virhostcpudata/linux-high-ids/node/node0/cpulist
+new file mode 100644
+index 0000000000..74fc2fb6b0
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node0/cpulist
+@@ -0,0 +1 @@
++0-7
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node1/cpu10 b/tests/virhostcpudata/linux-high-ids/node/node1/cpu10
+new file mode 120000
+index 0000000000..a6dc6bb10e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node1/cpu10
+@@ -0,0 +1 @@
++../../cpu/cpu10
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node1/cpu11 b/tests/virhostcpudata/linux-high-ids/node/node1/cpu11
+new file mode 120000
+index 0000000000..e29d898284
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node1/cpu11
+@@ -0,0 +1 @@
++../../cpu/cpu11
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node1/cpu12 b/tests/virhostcpudata/linux-high-ids/node/node1/cpu12
+new file mode 120000
+index 0000000000..211519e8ab
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node1/cpu12
+@@ -0,0 +1 @@
++../../cpu/cpu12
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node1/cpu13 b/tests/virhostcpudata/linux-high-ids/node/node1/cpu13
+new file mode 120000
+index 0000000000..52d3b6970d
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node1/cpu13
+@@ -0,0 +1 @@
++../../cpu/cpu13
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node1/cpu14 b/tests/virhostcpudata/linux-high-ids/node/node1/cpu14
+new file mode 120000
+index 0000000000..24cb3b4569
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node1/cpu14
+@@ -0,0 +1 @@
++../../cpu/cpu14
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node1/cpu15 b/tests/virhostcpudata/linux-high-ids/node/node1/cpu15
+new file mode 120000
+index 0000000000..e905d85e46
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node1/cpu15
+@@ -0,0 +1 @@
++../../cpu/cpu15
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node1/cpu8 b/tests/virhostcpudata/linux-high-ids/node/node1/cpu8
+new file mode 120000
+index 0000000000..bda10cc343
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node1/cpu8
+@@ -0,0 +1 @@
++../../cpu/cpu8
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node1/cpu9 b/tests/virhostcpudata/linux-high-ids/node/node1/cpu9
+new file mode 120000
+index 0000000000..1ec1db255a
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node1/cpu9
+@@ -0,0 +1 @@
++../../cpu/cpu9
+\ No newline at end of file
+diff --git a/tests/virhostcpudata/linux-high-ids/node/node1/cpulist b/tests/virhostcpudata/linux-high-ids/node/node1/cpulist
+new file mode 100644
+index 0000000000..6ae44fb498
+--- /dev/null
++++ b/tests/virhostcpudata/linux-high-ids/node/node1/cpulist
+@@ -0,0 +1 @@
++8-15
+diff --git a/tests/virhostcputest.c b/tests/virhostcputest.c
+index 091dd59b83..e9d237ae0e 100644
+--- a/tests/virhostcputest.c
++++ b/tests/virhostcputest.c
+@@ -240,6 +240,7 @@ mymain(void)
+         {"f21-mustang", VIR_ARCH_AARCH64},
+         {"rhelsa-3.19.0-mustang", VIR_ARCH_AARCH64},
+         {"rhel74-moonshot", VIR_ARCH_AARCH64},
++        {"high-ids", VIR_ARCH_AARCH64},
+         {"deconf-cpus", VIR_ARCH_PPC64},
+         /* subcores, default configuration */
+         {"subcores1", VIR_ARCH_PPC64},
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-Add-missing-thread_siblings_list-files.patch b/SOURCES/libvirt-tests-Add-missing-thread_siblings_list-files.patch
new file mode 100644
index 0000000..2eac63b
--- /dev/null
+++ b/SOURCES/libvirt-tests-Add-missing-thread_siblings_list-files.patch
@@ -0,0 +1,654 @@
+From b8e703a31cf94fabecd9ce4a99e12259a7f499b2 Mon Sep 17 00:00:00 2001
+Message-Id: <b8e703a31cf94fabecd9ce4a99e12259a7f499b2@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Wed, 15 Aug 2018 14:04:41 +0200
+Subject: [PATCH] tests: Add missing thread_siblings_list files
+
+Some of the data dumps didn't include them; luckily,
+we're not actually missing any information since we
+can recreate them by looking at the corresponding
+thread_sibilings files.
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit 37e64f65083c858b4931ea0d2d08163bcca61651)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1608479
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ .../linux-test6/cpu/cpu0/topology/thread_siblings_list           | 1 +
+ .../linux-test6/cpu/cpu1/topology/thread_siblings_list           | 1 +
+ .../linux-test6/cpu/cpu2/topology/thread_siblings_list           | 1 +
+ .../linux-test6/cpu/cpu3/topology/thread_siblings_list           | 1 +
+ .../linux-test6/cpu/cpu4/topology/thread_siblings_list           | 1 +
+ .../linux-test6/cpu/cpu6/topology/thread_siblings_list           | 1 +
+ .../linux-test8/cpu/cpu0/topology/thread_siblings_list           | 1 +
+ .../linux-test8/cpu/cpu1/topology/thread_siblings_list           | 1 +
+ .../linux-test8/cpu/cpu10/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu11/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu12/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu13/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu14/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu15/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu16/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu17/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu18/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu19/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu2/topology/thread_siblings_list           | 1 +
+ .../linux-test8/cpu/cpu20/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu21/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu22/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu23/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu24/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu25/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu26/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu27/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu28/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu29/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu3/topology/thread_siblings_list           | 1 +
+ .../linux-test8/cpu/cpu30/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu31/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu32/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu33/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu34/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu35/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu36/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu37/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu38/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu39/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu4/topology/thread_siblings_list           | 1 +
+ .../linux-test8/cpu/cpu40/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu41/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu42/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu43/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu44/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu45/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu46/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu47/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu48/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu49/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu5/topology/thread_siblings_list           | 1 +
+ .../linux-test8/cpu/cpu50/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu51/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu52/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu53/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu54/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu55/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu56/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu57/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu58/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu59/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu6/topology/thread_siblings_list           | 1 +
+ .../linux-test8/cpu/cpu60/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu61/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu62/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu63/topology/thread_siblings_list          | 1 +
+ .../linux-test8/cpu/cpu7/topology/thread_siblings_list           | 1 +
+ .../linux-test8/cpu/cpu8/topology/thread_siblings_list           | 1 +
+ .../linux-test8/cpu/cpu9/topology/thread_siblings_list           | 1 +
+ 70 files changed, 70 insertions(+)
+ create mode 100644 tests/virhostcpudata/linux-test6/cpu/cpu0/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test6/cpu/cpu1/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test6/cpu/cpu2/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test6/cpu/cpu3/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test6/cpu/cpu4/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test6/cpu/cpu6/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu0/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu1/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu10/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu11/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu12/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu13/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu14/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu15/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu16/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu17/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu18/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu19/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu2/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu20/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu21/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu22/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu23/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu24/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu25/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu26/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu27/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu28/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu29/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu3/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu30/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu31/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu32/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu33/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu34/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu35/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu36/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu37/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu38/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu39/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu4/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu40/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu41/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu42/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu43/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu44/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu45/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu46/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu47/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu48/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu49/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu5/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu50/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu51/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu52/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu53/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu54/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu55/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu56/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu57/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu58/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu59/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu6/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu60/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu61/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu62/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu63/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu7/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu8/topology/thread_siblings_list
+ create mode 100644 tests/virhostcpudata/linux-test8/cpu/cpu9/topology/thread_siblings_list
+
+diff --git a/tests/virhostcpudata/linux-test6/cpu/cpu0/topology/thread_siblings_list b/tests/virhostcpudata/linux-test6/cpu/cpu0/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..d41d18ba00
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test6/cpu/cpu0/topology/thread_siblings_list
+@@ -0,0 +1 @@
++0,4
+diff --git a/tests/virhostcpudata/linux-test6/cpu/cpu1/topology/thread_siblings_list b/tests/virhostcpudata/linux-test6/cpu/cpu1/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..d00491fd7e
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test6/cpu/cpu1/topology/thread_siblings_list
+@@ -0,0 +1 @@
++1
+diff --git a/tests/virhostcpudata/linux-test6/cpu/cpu2/topology/thread_siblings_list b/tests/virhostcpudata/linux-test6/cpu/cpu2/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..62188ed84f
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test6/cpu/cpu2/topology/thread_siblings_list
+@@ -0,0 +1 @@
++2,6
+diff --git a/tests/virhostcpudata/linux-test6/cpu/cpu3/topology/thread_siblings_list b/tests/virhostcpudata/linux-test6/cpu/cpu3/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..00750edc07
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test6/cpu/cpu3/topology/thread_siblings_list
+@@ -0,0 +1 @@
++3
+diff --git a/tests/virhostcpudata/linux-test6/cpu/cpu4/topology/thread_siblings_list b/tests/virhostcpudata/linux-test6/cpu/cpu4/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..d41d18ba00
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test6/cpu/cpu4/topology/thread_siblings_list
+@@ -0,0 +1 @@
++0,4
+diff --git a/tests/virhostcpudata/linux-test6/cpu/cpu6/topology/thread_siblings_list b/tests/virhostcpudata/linux-test6/cpu/cpu6/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..62188ed84f
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test6/cpu/cpu6/topology/thread_siblings_list
+@@ -0,0 +1 @@
++2,6
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu0/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu0/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..d41d18ba00
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu0/topology/thread_siblings_list
+@@ -0,0 +1 @@
++0,4
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu1/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu1/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..cf141eb999
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu1/topology/thread_siblings_list
+@@ -0,0 +1 @@
++1,5
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu10/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu10/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..416645a8b7
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu10/topology/thread_siblings_list
+@@ -0,0 +1 @@
++10,14
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu11/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu11/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..15b4ef0285
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu11/topology/thread_siblings_list
+@@ -0,0 +1 @@
++11,15
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu12/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu12/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..88db7dc4e9
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu12/topology/thread_siblings_list
+@@ -0,0 +1 @@
++8,12
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu13/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu13/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..0b2ed19cc4
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu13/topology/thread_siblings_list
+@@ -0,0 +1 @@
++9,13
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu14/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu14/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..416645a8b7
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu14/topology/thread_siblings_list
+@@ -0,0 +1 @@
++10,14
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu15/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu15/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..15b4ef0285
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu15/topology/thread_siblings_list
+@@ -0,0 +1 @@
++11,15
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu16/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu16/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..dc08f98d76
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu16/topology/thread_siblings_list
+@@ -0,0 +1 @@
++16,20
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu17/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu17/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..3f291fe9cd
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu17/topology/thread_siblings_list
+@@ -0,0 +1 @@
++17,21
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu18/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu18/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..cbc41df4e4
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu18/topology/thread_siblings_list
+@@ -0,0 +1 @@
++18,22
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu19/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu19/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..f7bd0a03eb
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu19/topology/thread_siblings_list
+@@ -0,0 +1 @@
++19,23
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu2/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu2/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..62188ed84f
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu2/topology/thread_siblings_list
+@@ -0,0 +1 @@
++2,6
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu20/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu20/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..dc08f98d76
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu20/topology/thread_siblings_list
+@@ -0,0 +1 @@
++16,20
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu21/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu21/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..3f291fe9cd
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu21/topology/thread_siblings_list
+@@ -0,0 +1 @@
++17,21
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu22/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu22/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..cbc41df4e4
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu22/topology/thread_siblings_list
+@@ -0,0 +1 @@
++18,22
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu23/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu23/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..f7bd0a03eb
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu23/topology/thread_siblings_list
+@@ -0,0 +1 @@
++19,23
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu24/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu24/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..7a2045f9c8
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu24/topology/thread_siblings_list
+@@ -0,0 +1 @@
++24,28
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu25/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu25/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..df9601d5d0
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu25/topology/thread_siblings_list
+@@ -0,0 +1 @@
++25,29
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu26/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu26/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..3ef1545e28
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu26/topology/thread_siblings_list
+@@ -0,0 +1 @@
++26,30
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu27/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu27/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..bef1c937bb
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu27/topology/thread_siblings_list
+@@ -0,0 +1 @@
++27,31
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu28/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu28/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..7a2045f9c8
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu28/topology/thread_siblings_list
+@@ -0,0 +1 @@
++24,28
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu29/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu29/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..df9601d5d0
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu29/topology/thread_siblings_list
+@@ -0,0 +1 @@
++25,29
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu3/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu3/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..62dcd59765
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu3/topology/thread_siblings_list
+@@ -0,0 +1 @@
++3,7
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu30/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu30/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..3ef1545e28
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu30/topology/thread_siblings_list
+@@ -0,0 +1 @@
++26,30
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu31/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu31/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..bef1c937bb
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu31/topology/thread_siblings_list
+@@ -0,0 +1 @@
++27,31
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu32/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu32/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..1426303eac
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu32/topology/thread_siblings_list
+@@ -0,0 +1 @@
++32,36
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu33/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu33/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..ab130ea012
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu33/topology/thread_siblings_list
+@@ -0,0 +1 @@
++33,37
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu34/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu34/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..41dc5486f0
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu34/topology/thread_siblings_list
+@@ -0,0 +1 @@
++34,38
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu35/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu35/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..ad0bc77ce1
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu35/topology/thread_siblings_list
+@@ -0,0 +1 @@
++35,39
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu36/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu36/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..1426303eac
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu36/topology/thread_siblings_list
+@@ -0,0 +1 @@
++32,36
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu37/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu37/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..ab130ea012
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu37/topology/thread_siblings_list
+@@ -0,0 +1 @@
++33,37
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu38/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu38/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..41dc5486f0
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu38/topology/thread_siblings_list
+@@ -0,0 +1 @@
++34,38
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu39/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu39/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..ad0bc77ce1
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu39/topology/thread_siblings_list
+@@ -0,0 +1 @@
++35,39
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu4/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu4/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..d41d18ba00
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu4/topology/thread_siblings_list
+@@ -0,0 +1 @@
++0,4
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu40/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu40/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..ed4729e950
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu40/topology/thread_siblings_list
+@@ -0,0 +1 @@
++40,44
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu41/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu41/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..a0aeb17376
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu41/topology/thread_siblings_list
+@@ -0,0 +1 @@
++41,45
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu42/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu42/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..ce9410e373
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu42/topology/thread_siblings_list
+@@ -0,0 +1 @@
++42,46
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu43/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu43/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..0296f6a37c
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu43/topology/thread_siblings_list
+@@ -0,0 +1 @@
++43,47
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu44/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu44/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..ed4729e950
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu44/topology/thread_siblings_list
+@@ -0,0 +1 @@
++40,44
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu45/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu45/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..a0aeb17376
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu45/topology/thread_siblings_list
+@@ -0,0 +1 @@
++41,45
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu46/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu46/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..ce9410e373
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu46/topology/thread_siblings_list
+@@ -0,0 +1 @@
++42,46
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu47/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu47/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..0296f6a37c
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu47/topology/thread_siblings_list
+@@ -0,0 +1 @@
++43,47
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu48/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu48/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..b9e3c6870a
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu48/topology/thread_siblings_list
+@@ -0,0 +1 @@
++48,52
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu49/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu49/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..61a95fd5b5
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu49/topology/thread_siblings_list
+@@ -0,0 +1 @@
++49,53
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu5/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu5/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..cf141eb999
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu5/topology/thread_siblings_list
+@@ -0,0 +1 @@
++1,5
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu50/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu50/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..4e057eaaf1
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu50/topology/thread_siblings_list
+@@ -0,0 +1 @@
++50,54
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu51/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu51/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..d541fb8a1c
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu51/topology/thread_siblings_list
+@@ -0,0 +1 @@
++51,55
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu52/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu52/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..b9e3c6870a
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu52/topology/thread_siblings_list
+@@ -0,0 +1 @@
++48,52
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu53/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu53/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..61a95fd5b5
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu53/topology/thread_siblings_list
+@@ -0,0 +1 @@
++49,53
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu54/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu54/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..4e057eaaf1
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu54/topology/thread_siblings_list
+@@ -0,0 +1 @@
++50,54
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu55/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu55/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..d541fb8a1c
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu55/topology/thread_siblings_list
+@@ -0,0 +1 @@
++51,55
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu56/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu56/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..21ac03e529
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu56/topology/thread_siblings_list
+@@ -0,0 +1 @@
++56,60
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu57/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu57/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..071eb77853
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu57/topology/thread_siblings_list
+@@ -0,0 +1 @@
++57,61
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu58/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu58/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..e49be8e926
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu58/topology/thread_siblings_list
+@@ -0,0 +1 @@
++58,62
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu59/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu59/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..c33c604dc1
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu59/topology/thread_siblings_list
+@@ -0,0 +1 @@
++59,63
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu6/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu6/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..62188ed84f
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu6/topology/thread_siblings_list
+@@ -0,0 +1 @@
++2,6
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu60/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu60/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..21ac03e529
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu60/topology/thread_siblings_list
+@@ -0,0 +1 @@
++56,60
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu61/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu61/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..071eb77853
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu61/topology/thread_siblings_list
+@@ -0,0 +1 @@
++57,61
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu62/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu62/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..e49be8e926
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu62/topology/thread_siblings_list
+@@ -0,0 +1 @@
++58,62
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu63/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu63/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..c33c604dc1
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu63/topology/thread_siblings_list
+@@ -0,0 +1 @@
++59,63
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu7/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu7/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..62dcd59765
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu7/topology/thread_siblings_list
+@@ -0,0 +1 @@
++3,7
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu8/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu8/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..88db7dc4e9
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu8/topology/thread_siblings_list
+@@ -0,0 +1 @@
++8,12
+diff --git a/tests/virhostcpudata/linux-test8/cpu/cpu9/topology/thread_siblings_list b/tests/virhostcpudata/linux-test8/cpu/cpu9/topology/thread_siblings_list
+new file mode 100644
+index 0000000000..0b2ed19cc4
+--- /dev/null
++++ b/tests/virhostcpudata/linux-test8/cpu/cpu9/topology/thread_siblings_list
+@@ -0,0 +1 @@
++9,13
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-Add-more-tests-to-qemucaps2xml.patch b/SOURCES/libvirt-tests-Add-more-tests-to-qemucaps2xml.patch
new file mode 100644
index 0000000..3264c3c
--- /dev/null
+++ b/SOURCES/libvirt-tests-Add-more-tests-to-qemucaps2xml.patch
@@ -0,0 +1,1089 @@
+From 56c30b4dafd6484837b926455d7f1165467cc9f7 Mon Sep 17 00:00:00 2001
+Message-Id: <56c30b4dafd6484837b926455d7f1165467cc9f7@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Mon, 17 Sep 2018 18:00:49 +0200
+Subject: [PATCH] tests: Add more tests to qemucaps2xml
+
+More specifically, everything that's tested by qemucapabilities
+now goes through qemucaps2xml as well.
+
+Ideally we'll rewrite both so that listing all test cases is
+unnecessary and they get picked up automatically by listing the
+contents of the input directory instead, but that's a refactor
+for another day :)
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit a3676f3763625d06778ee14dd6b006b3ba91846a)
+
+Changes from upstream:
+
+  * Removed references to RISC-V architectures.
+    Necessary for the test suite to pass because we never
+    picked up 869cb692fa1d downstream.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1629862
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ tests/qemucapabilitiestest.c                  |  1 +
+ .../qemucaps2xmloutdata/caps_1.5.3.x86_64.xml | 30 +++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_1.7.0.x86_64.xml | 30 +++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.1.1.x86_64.xml | 30 +++++++++++++++++++
+ .../caps_2.10.0.aarch64.xml                   | 29 ++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.10.0.ppc64.xml | 28 +++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.10.0.s390x.xml | 28 +++++++++++++++++
+ .../caps_2.10.0.x86_64.xml                    | 30 +++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.11.0.s390x.xml | 28 +++++++++++++++++
+ .../caps_2.11.0.x86_64.xml                    | 30 +++++++++++++++++++
+ .../caps_2.12.0.aarch64.xml                   | 29 ++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.12.0.ppc64.xml | 28 +++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.12.0.s390x.xml | 28 +++++++++++++++++
+ .../caps_2.12.0.x86_64.xml                    | 30 +++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.4.0.x86_64.xml | 30 +++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.5.0.x86_64.xml | 30 +++++++++++++++++++
+ .../caps_2.6.0.aarch64.xml                    | 29 ++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.6.0.ppc64.xml  | 28 +++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.6.0.x86_64.xml | 30 +++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.7.0.s390x.xml  | 28 +++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.7.0.x86_64.xml | 30 +++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.8.0.s390x.xml  | 28 +++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.8.0.x86_64.xml | 30 +++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.9.0.ppc64.xml  | 28 +++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.9.0.s390x.xml  | 28 +++++++++++++++++
+ .../qemucaps2xmloutdata/caps_2.9.0.x86_64.xml | 30 +++++++++++++++++++
+ .../qemucaps2xmloutdata/caps_3.0.0.ppc64.xml  | 28 +++++++++++++++++
+ .../qemucaps2xmloutdata/caps_3.0.0.x86_64.xml | 30 +++++++++++++++++++
+ tests/qemucaps2xmltest.c                      | 28 +++++++++++++++++
+ 29 files changed, 814 insertions(+)
+ create mode 100644 tests/qemucaps2xmloutdata/caps_1.5.3.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_1.7.0.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.1.1.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.10.0.aarch64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.10.0.ppc64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.10.0.s390x.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.10.0.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.11.0.s390x.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.11.0.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.12.0.aarch64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.12.0.ppc64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.12.0.s390x.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.12.0.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.4.0.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.5.0.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.6.0.aarch64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.6.0.ppc64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.6.0.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.7.0.s390x.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.7.0.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.8.0.s390x.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.8.0.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.9.0.ppc64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.9.0.s390x.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_2.9.0.x86_64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_3.0.0.ppc64.xml
+ create mode 100644 tests/qemucaps2xmloutdata/caps_3.0.0.x86_64.xml
+
+diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c
+index 4aec175968..828e3d106c 100644
+--- a/tests/qemucapabilitiestest.c
++++ b/tests/qemucapabilitiestest.c
+@@ -163,6 +163,7 @@ mymain(void)
+             ret = -1; \
+     } while (0)
+ 
++    /* Keep this in sync with qemucaps2xmltest */
+     DO_TEST("x86_64", "caps_1.5.3");
+     DO_TEST("x86_64", "caps_1.6.0");
+     DO_TEST("x86_64", "caps_1.7.0");
+diff --git a/tests/qemucaps2xmloutdata/caps_1.5.3.x86_64.xml b/tests/qemucaps2xmloutdata/caps_1.5.3.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_1.5.3.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_1.7.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_1.7.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_1.7.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.1.1.x86_64.xml b/tests/qemucaps2xmloutdata/caps_2.1.1.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.1.1.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.10.0.aarch64.xml b/tests/qemucaps2xmloutdata/caps_2.10.0.aarch64.xml
+new file mode 100644
+index 0000000000..a879d67df3
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.10.0.aarch64.xml
+@@ -0,0 +1,29 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>aarch64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='aarch64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-aarch64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-aarch64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.10.0.ppc64.xml b/tests/qemucaps2xmloutdata/caps_2.10.0.ppc64.xml
+new file mode 100644
+index 0000000000..74eaf3ba0e
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.10.0.ppc64.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>ppc64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='ppc64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.10.0.s390x.xml b/tests/qemucaps2xmloutdata/caps_2.10.0.s390x.xml
+new file mode 100644
+index 0000000000..20ef995d62
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.10.0.s390x.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>s390x</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='s390x'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-s390x</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-s390x</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.10.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_2.10.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.10.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.11.0.s390x.xml b/tests/qemucaps2xmloutdata/caps_2.11.0.s390x.xml
+new file mode 100644
+index 0000000000..20ef995d62
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.11.0.s390x.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>s390x</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='s390x'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-s390x</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-s390x</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.11.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_2.11.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.11.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.12.0.aarch64.xml b/tests/qemucaps2xmloutdata/caps_2.12.0.aarch64.xml
+new file mode 100644
+index 0000000000..a879d67df3
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.12.0.aarch64.xml
+@@ -0,0 +1,29 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>aarch64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='aarch64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-aarch64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-aarch64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.12.0.ppc64.xml b/tests/qemucaps2xmloutdata/caps_2.12.0.ppc64.xml
+new file mode 100644
+index 0000000000..74eaf3ba0e
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.12.0.ppc64.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>ppc64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='ppc64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.12.0.s390x.xml b/tests/qemucaps2xmloutdata/caps_2.12.0.s390x.xml
+new file mode 100644
+index 0000000000..20ef995d62
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.12.0.s390x.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>s390x</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='s390x'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-s390x</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-s390x</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.12.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_2.12.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.12.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.4.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_2.4.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.4.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.5.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_2.5.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.5.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.6.0.aarch64.xml b/tests/qemucaps2xmloutdata/caps_2.6.0.aarch64.xml
+new file mode 100644
+index 0000000000..a879d67df3
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.6.0.aarch64.xml
+@@ -0,0 +1,29 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>aarch64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='aarch64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-aarch64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-aarch64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.6.0.ppc64.xml b/tests/qemucaps2xmloutdata/caps_2.6.0.ppc64.xml
+new file mode 100644
+index 0000000000..74eaf3ba0e
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.6.0.ppc64.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>ppc64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='ppc64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.6.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_2.6.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.6.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.7.0.s390x.xml b/tests/qemucaps2xmloutdata/caps_2.7.0.s390x.xml
+new file mode 100644
+index 0000000000..20ef995d62
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.7.0.s390x.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>s390x</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='s390x'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-s390x</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-s390x</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.7.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_2.7.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.7.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.8.0.s390x.xml b/tests/qemucaps2xmloutdata/caps_2.8.0.s390x.xml
+new file mode 100644
+index 0000000000..20ef995d62
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.8.0.s390x.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>s390x</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='s390x'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-s390x</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-s390x</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.8.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_2.8.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.8.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.9.0.ppc64.xml b/tests/qemucaps2xmloutdata/caps_2.9.0.ppc64.xml
+new file mode 100644
+index 0000000000..74eaf3ba0e
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.9.0.ppc64.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>ppc64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='ppc64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.9.0.s390x.xml b/tests/qemucaps2xmloutdata/caps_2.9.0.s390x.xml
+new file mode 100644
+index 0000000000..20ef995d62
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.9.0.s390x.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>s390x</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='s390x'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-s390x</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-s390x</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_2.9.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_2.9.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_2.9.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_3.0.0.ppc64.xml b/tests/qemucaps2xmloutdata/caps_3.0.0.ppc64.xml
+new file mode 100644
+index 0000000000..74eaf3ba0e
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_3.0.0.ppc64.xml
+@@ -0,0 +1,28 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>ppc64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='ppc64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-ppc64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmloutdata/caps_3.0.0.x86_64.xml b/tests/qemucaps2xmloutdata/caps_3.0.0.x86_64.xml
+new file mode 100644
+index 0000000000..b58f54fefd
+--- /dev/null
++++ b/tests/qemucaps2xmloutdata/caps_3.0.0.x86_64.xml
+@@ -0,0 +1,30 @@
++<capabilities>
++
++  <host>
++    <cpu>
++      <arch>x86_64</arch>
++    </cpu>
++    <power_management/>
++    <iommu support='no'/>
++  </host>
++
++  <guest>
++    <os_type>hvm</os_type>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      <domain type='qemu'/>
++      <domain type='kvm'>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
++      </domain>
++    </arch>
++    <features>
++      <cpuselection/>
++      <deviceboot/>
++      <disksnapshot default='on' toggle='no'/>
++      <acpi default='on' toggle='yes'/>
++      <apic default='on' toggle='no'/>
++    </features>
++  </guest>
++
++</capabilities>
+diff --git a/tests/qemucaps2xmltest.c b/tests/qemucaps2xmltest.c
+index 65dd97c0a4..cd951b2bb4 100644
+--- a/tests/qemucaps2xmltest.c
++++ b/tests/qemucaps2xmltest.c
+@@ -187,7 +187,35 @@ mymain(void)
+     if (virTestRun(name "(" arch ")", testQemuCapsXML, &data) < 0) \
+         ret = -1
+ 
++    /* Keep this in sync with qemucapabilitiestest */
++    DO_TEST("x86_64", "caps_1.5.3");
+     DO_TEST("x86_64", "caps_1.6.0");
++    DO_TEST("x86_64", "caps_1.7.0");
++    DO_TEST("x86_64", "caps_2.1.1");
++    DO_TEST("x86_64", "caps_2.4.0");
++    DO_TEST("x86_64", "caps_2.5.0");
++    DO_TEST("x86_64", "caps_2.6.0");
++    DO_TEST("x86_64", "caps_2.7.0");
++    DO_TEST("x86_64", "caps_2.8.0");
++    DO_TEST("x86_64", "caps_2.9.0");
++    DO_TEST("x86_64", "caps_2.10.0");
++    DO_TEST("x86_64", "caps_2.11.0");
++    DO_TEST("x86_64", "caps_2.12.0");
++    DO_TEST("x86_64", "caps_3.0.0");
++    DO_TEST("aarch64", "caps_2.6.0");
++    DO_TEST("aarch64", "caps_2.10.0");
++    DO_TEST("aarch64", "caps_2.12.0");
++    DO_TEST("ppc64", "caps_2.6.0");
++    DO_TEST("ppc64", "caps_2.9.0");
++    DO_TEST("ppc64", "caps_2.10.0");
++    DO_TEST("ppc64", "caps_2.12.0");
++    DO_TEST("ppc64", "caps_3.0.0");
++    DO_TEST("s390x", "caps_2.7.0");
++    DO_TEST("s390x", "caps_2.8.0");
++    DO_TEST("s390x", "caps_2.9.0");
++    DO_TEST("s390x", "caps_2.10.0");
++    DO_TEST("s390x", "caps_2.11.0");
++    DO_TEST("s390x", "caps_2.12.0");
+ 
+     return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+ }
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-tests-Follow-up-on-qemucaps2xmldata-rename.patch b/SOURCES/libvirt-tests-Follow-up-on-qemucaps2xmldata-rename.patch
new file mode 100644
index 0000000..4452d69
--- /dev/null
+++ b/SOURCES/libvirt-tests-Follow-up-on-qemucaps2xmldata-rename.patch
@@ -0,0 +1,37 @@
+From 2af7e75f8501e8bf3f50ed1c4a3a794a89c9de6b Mon Sep 17 00:00:00 2001
+Message-Id: <2af7e75f8501e8bf3f50ed1c4a3a794a89c9de6b@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Mon, 17 Sep 2018 18:00:54 +0200
+Subject: [PATCH] tests: Follow up on qemucaps2xmldata rename
+
+The directory has been renamed in 562990849a9d, but a
+reference to it was not updated at the same time, causing
+'make dist' to fail ever since. Fix it.
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit d52dd5911b32a31bb17ee97bb9df5683741603b0)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1629862
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ tests/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index f5872fa42b..41905d1a4d 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -122,7 +122,7 @@ EXTRA_DIST = \
+ 	qemuargv2xmldata \
+ 	qemublocktestdata \
+ 	qemucapabilitiesdata \
+-	qemucaps2xmldata \
++	qemucaps2xmloutdata \
+ 	qemuhotplugtestcpus \
+ 	qemuhotplugtestdevices \
+ 	qemuhotplugtestdomains \
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-tests-Reuse-qemucapabilities-data-for-qemucaps2xml.patch b/SOURCES/libvirt-tests-Reuse-qemucapabilities-data-for-qemucaps2xml.patch
new file mode 100644
index 0000000..a7c99b2
--- /dev/null
+++ b/SOURCES/libvirt-tests-Reuse-qemucapabilities-data-for-qemucaps2xml.patch
@@ -0,0 +1,478 @@
+From 9d253e5e4b691af1deaa5022fd2ec01af0054a3e Mon Sep 17 00:00:00 2001
+Message-Id: <9d253e5e4b691af1deaa5022fd2ec01af0054a3e@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Mon, 17 Sep 2018 18:00:48 +0200
+Subject: [PATCH] tests: Reuse qemucapabilities data for qemucaps2xml
+
+While qemucaps2xml has a meager two test cases to its name, we
+have plenty of data from qemucapabilities which is taken from
+actual QEMU binaries, covers pretty much all supported QEMU
+versions and architectures and is even in the right format already!
+
+Rewrite qemucaps2xml so that it uses qemucapabilities data as
+input. Right now we have a single test case, but we're going to
+add a lot more next.
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 562990849a9de255b5fefa39be3f301b1bddfa6e)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1629862
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ tests/qemucaps2xmldata/all_1.6.0-1.caps       | 129 ------------------
+ .../nodisksnapshot_1.6.0-1.caps               | 128 -----------------
+ .../nodisksnapshot_1.6.0-1.xml                |  32 -----
+ .../caps_1.6.0.x86_64.xml}                    |  12 +-
+ tests/qemucaps2xmltest.c                      |  33 +++--
+ 5 files changed, 23 insertions(+), 311 deletions(-)
+ delete mode 100644 tests/qemucaps2xmldata/all_1.6.0-1.caps
+ delete mode 100644 tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.caps
+ delete mode 100644 tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.xml
+ rename tests/{qemucaps2xmldata/all_1.6.0-1.xml => qemucaps2xmloutdata/caps_1.6.0.x86_64.xml} (67%)
+
+diff --git a/tests/qemucaps2xmldata/all_1.6.0-1.caps b/tests/qemucaps2xmldata/all_1.6.0-1.caps
+deleted file mode 100644
+index d39d0bebbf..0000000000
+--- a/tests/qemucaps2xmldata/all_1.6.0-1.caps
++++ /dev/null
+@@ -1,129 +0,0 @@
+-  <qemuCaps>
+-    <flag name='mem-path'/>
+-    <flag name='drive-serial'/>
+-    <flag name='chardev'/>
+-    <flag name='enable-kvm'/>
+-    <flag name='monitor-json'/>
+-    <flag name='balloon'/>
+-    <flag name='device'/>
+-    <flag name='sdl'/>
+-    <flag name='smp-topology'/>
+-    <flag name='netdev'/>
+-    <flag name='rtc'/>
+-    <flag name='vhost-net'/>
+-    <flag name='no-hpet'/>
+-    <flag name='no-kvm-pit'/>
+-    <flag name='pci-configfd'/>
+-    <flag name='nodefconfig'/>
+-    <flag name='boot-menu'/>
+-    <flag name='fsdev'/>
+-    <flag name='name-process'/>
+-    <flag name='drive-readonly'/>
+-    <flag name='smbios-type'/>
+-    <flag name='vga-qxl'/>
+-    <flag name='spice'/>
+-    <flag name='vga-none'/>
+-    <flag name='boot-index'/>
+-    <flag name='hda-duplex'/>
+-    <flag name='drive-aio'/>
+-    <flag name='pci-multibus'/>
+-    <flag name='pci-bootindex'/>
+-    <flag name='ccid-emulated'/>
+-    <flag name='ccid-passthru'/>
+-    <flag name='chardev-spicevmc'/>
+-    <flag name='virtio-tx-alg'/>
+-    <flag name='device-qxl-vga'/>
+-    <flag name='pci-multifunction'/>
+-    <flag name='virtio-blk-pci.ioeventfd'/>
+-    <flag name='sga'/>
+-    <flag name='virtio-blk-pci.event_idx'/>
+-    <flag name='virtio-net-pci.event_idx'/>
+-    <flag name='cache-directsync'/>
+-    <flag name='piix3-usb-uhci'/>
+-    <flag name='piix4-usb-uhci'/>
+-    <flag name='usb-ehci'/>
+-    <flag name='ich9-usb-ehci1'/>
+-    <flag name='vt82c686b-usb-uhci'/>
+-    <flag name='pci-ohci'/>
+-    <flag name='usb-hub'/>
+-    <flag name='no-shutdown'/>
+-    <flag name='cache-unsafe'/>
+-    <flag name='rombar'/>
+-    <flag name='ich9-ahci'/>
+-    <flag name='no-acpi'/>
+-    <flag name='fsdev-readonly'/>
+-    <flag name='virtio-blk-pci.scsi'/>
+-    <flag name='blk-sg-io'/>
+-    <flag name='drive-copy-on-read'/>
+-    <flag name='cpu-host'/>
+-    <flag name='fsdev-writeout'/>
+-    <flag name='drive-iotune'/>
+-    <flag name='system_wakeup'/>
+-    <flag name='scsi-disk.channel'/>
+-    <flag name='scsi-block'/>
+-    <flag name='transaction'/>
+-    <flag name='block-job-async'/>
+-    <flag name='scsi-cd'/>
+-    <flag name='ide-cd'/>
+-    <flag name='no-user-config'/>
+-    <flag name='hda-micro'/>
+-    <flag name='dump-guest-memory'/>
+-    <flag name='nec-usb-xhci'/>
+-    <flag name='balloon-event'/>
+-    <flag name='bridge'/>
+-    <flag name='lsi'/>
+-    <flag name='virtio-scsi-pci'/>
+-    <flag name='blockio'/>
+-    <flag name='disable-s3'/>
+-    <flag name='disable-s4'/>
+-    <flag name='ide-drive.wwn'/>
+-    <flag name='scsi-disk.wwn'/>
+-    <flag name='seccomp-sandbox'/>
+-    <flag name='dump-guest-core'/>
+-    <flag name='seamless-migration'/>
+-    <flag name='block-commit'/>
+-    <flag name='vnc'/>
+-    <flag name='drive-mirror'/>
+-    <flag name='usb-host.bootindex'/>
+-    <flag name='blockdev-snapshot-sync'/>
+-    <flag name='qxl'/>
+-    <flag name='VGA'/>
+-    <flag name='cirrus-vga'/>
+-    <flag name='vmware-svga'/>
+-    <flag name='device-video-primary'/>
+-    <flag name='usb-serial'/>
+-    <flag name='usb-net'/>
+-    <flag name='add-fd'/>
+-    <flag name='nbd-server'/>
+-    <flag name='virtio-rng'/>
+-    <flag name='rng-random'/>
+-    <flag name='rng-egd'/>
+-    <flag name='dtb'/>
+-    <flag name='megasas'/>
+-    <flag name='ipv6-migration'/>
+-    <flag name='machine-opt'/>
+-    <flag name='machine-usb-opt'/>
+-    <flag name='pci-bridge'/>
+-    <flag name='vfio-pci'/>
+-    <flag name='vfio-pci.bootindex'/>
+-    <flag name='scsi-generic'/>
+-    <flag name='scsi-generic.bootindex'/>
+-    <flag name='mem-merge'/>
+-    <flag name='vnc-websocket'/>
+-    <flag name='mlock'/>
+-    <flag name='vnc-share-policy'/>
+-    <flag name='device-del-event'/>
+-    <flag name='dmi-to-pci-bridge'/>
+-    <flag name='i440fx-pci-hole64-size'/>
+-    <flag name='q35-pci-hole64-size'/>
+-    <flag name='usb-storage'/>
+-    <flag name='usb-storage.removable'/>
+-    <flag name='virtio-mmio'/>
+-    <flag name='ich9-intel-hda'/>
+-    <flag name='kvm-pit-lost-tick-policy'/>
+-    <flag name='boot-strict'/>
+-    <flag name='pvpanic'/>
+-    <flag name='reboot-timeout'/>
+-    <flag name='enable-fips'/>
+-    <flag name='name-guest'/>
+-  </qemuCaps>
+diff --git a/tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.caps b/tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.caps
+deleted file mode 100644
+index 5a0372c917..0000000000
+--- a/tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.caps
++++ /dev/null
+@@ -1,128 +0,0 @@
+-  <qemuCaps>
+-    <flag name='mem-path'/>
+-    <flag name='drive-serial'/>
+-    <flag name='chardev'/>
+-    <flag name='enable-kvm'/>
+-    <flag name='monitor-json'/>
+-    <flag name='balloon'/>
+-    <flag name='device'/>
+-    <flag name='sdl'/>
+-    <flag name='smp-topology'/>
+-    <flag name='netdev'/>
+-    <flag name='rtc'/>
+-    <flag name='vhost-net'/>
+-    <flag name='no-hpet'/>
+-    <flag name='no-kvm-pit'/>
+-    <flag name='pci-configfd'/>
+-    <flag name='nodefconfig'/>
+-    <flag name='boot-menu'/>
+-    <flag name='fsdev'/>
+-    <flag name='name-process'/>
+-    <flag name='drive-readonly'/>
+-    <flag name='smbios-type'/>
+-    <flag name='vga-qxl'/>
+-    <flag name='spice'/>
+-    <flag name='vga-none'/>
+-    <flag name='boot-index'/>
+-    <flag name='hda-duplex'/>
+-    <flag name='drive-aio'/>
+-    <flag name='pci-multibus'/>
+-    <flag name='pci-bootindex'/>
+-    <flag name='ccid-emulated'/>
+-    <flag name='ccid-passthru'/>
+-    <flag name='chardev-spicevmc'/>
+-    <flag name='virtio-tx-alg'/>
+-    <flag name='device-qxl-vga'/>
+-    <flag name='pci-multifunction'/>
+-    <flag name='virtio-blk-pci.ioeventfd'/>
+-    <flag name='sga'/>
+-    <flag name='virtio-blk-pci.event_idx'/>
+-    <flag name='virtio-net-pci.event_idx'/>
+-    <flag name='cache-directsync'/>
+-    <flag name='piix3-usb-uhci'/>
+-    <flag name='piix4-usb-uhci'/>
+-    <flag name='usb-ehci'/>
+-    <flag name='ich9-usb-ehci1'/>
+-    <flag name='vt82c686b-usb-uhci'/>
+-    <flag name='pci-ohci'/>
+-    <flag name='usb-hub'/>
+-    <flag name='no-shutdown'/>
+-    <flag name='cache-unsafe'/>
+-    <flag name='rombar'/>
+-    <flag name='ich9-ahci'/>
+-    <flag name='no-acpi'/>
+-    <flag name='fsdev-readonly'/>
+-    <flag name='virtio-blk-pci.scsi'/>
+-    <flag name='blk-sg-io'/>
+-    <flag name='drive-copy-on-read'/>
+-    <flag name='cpu-host'/>
+-    <flag name='fsdev-writeout'/>
+-    <flag name='drive-iotune'/>
+-    <flag name='system_wakeup'/>
+-    <flag name='scsi-disk.channel'/>
+-    <flag name='scsi-block'/>
+-    <flag name='transaction'/>
+-    <flag name='block-job-async'/>
+-    <flag name='scsi-cd'/>
+-    <flag name='ide-cd'/>
+-    <flag name='no-user-config'/>
+-    <flag name='hda-micro'/>
+-    <flag name='dump-guest-memory'/>
+-    <flag name='nec-usb-xhci'/>
+-    <flag name='balloon-event'/>
+-    <flag name='bridge'/>
+-    <flag name='lsi'/>
+-    <flag name='virtio-scsi-pci'/>
+-    <flag name='blockio'/>
+-    <flag name='disable-s3'/>
+-    <flag name='disable-s4'/>
+-    <flag name='ide-drive.wwn'/>
+-    <flag name='scsi-disk.wwn'/>
+-    <flag name='seccomp-sandbox'/>
+-    <flag name='dump-guest-core'/>
+-    <flag name='seamless-migration'/>
+-    <flag name='block-commit'/>
+-    <flag name='vnc'/>
+-    <flag name='drive-mirror'/>
+-    <flag name='usb-host.bootindex'/>
+-    <flag name='qxl'/>
+-    <flag name='VGA'/>
+-    <flag name='cirrus-vga'/>
+-    <flag name='vmware-svga'/>
+-    <flag name='device-video-primary'/>
+-    <flag name='usb-serial'/>
+-    <flag name='usb-net'/>
+-    <flag name='add-fd'/>
+-    <flag name='nbd-server'/>
+-    <flag name='virtio-rng'/>
+-    <flag name='rng-random'/>
+-    <flag name='rng-egd'/>
+-    <flag name='dtb'/>
+-    <flag name='megasas'/>
+-    <flag name='ipv6-migration'/>
+-    <flag name='machine-opt'/>
+-    <flag name='machine-usb-opt'/>
+-    <flag name='pci-bridge'/>
+-    <flag name='vfio-pci'/>
+-    <flag name='vfio-pci.bootindex'/>
+-    <flag name='scsi-generic'/>
+-    <flag name='scsi-generic.bootindex'/>
+-    <flag name='mem-merge'/>
+-    <flag name='vnc-websocket'/>
+-    <flag name='mlock'/>
+-    <flag name='vnc-share-policy'/>
+-    <flag name='device-del-event'/>
+-    <flag name='dmi-to-pci-bridge'/>
+-    <flag name='i440fx-pci-hole64-size'/>
+-    <flag name='q35-pci-hole64-size'/>
+-    <flag name='usb-storage'/>
+-    <flag name='usb-storage.removable'/>
+-    <flag name='virtio-mmio'/>
+-    <flag name='ich9-intel-hda'/>
+-    <flag name='kvm-pit-lost-tick-policy'/>
+-    <flag name='boot-strict'/>
+-    <flag name='pvpanic'/>
+-    <flag name='reboot-timeout'/>
+-    <flag name='enable-fips'/>
+-    <flag name='name-guest'/>
+-  </qemuCaps>
+diff --git a/tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.xml b/tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.xml
+deleted file mode 100644
+index 981344e6fd..0000000000
+--- a/tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.xml
++++ /dev/null
+@@ -1,32 +0,0 @@
+-<capabilities>
+-
+-  <host>
+-    <cpu>
+-      <arch>i686</arch>
+-    </cpu>
+-    <power_management/>
+-    <iommu support='no'/>
+-  </host>
+-
+-  <guest>
+-    <os_type>hvm</os_type>
+-    <arch name='i686'>
+-      <wordsize>32</wordsize>
+-      <emulator>/usr/bin/qemu-system-i386</emulator>
+-      <domain type='qemu'/>
+-      <domain type='kvm'>
+-        <emulator>/usr/bin/qemu-system-i386</emulator>
+-      </domain>
+-    </arch>
+-    <features>
+-      <cpuselection/>
+-      <deviceboot/>
+-      <disksnapshot default='off' toggle='no'/>
+-      <acpi default='on' toggle='yes'/>
+-      <apic default='on' toggle='no'/>
+-      <pae/>
+-      <nonpae/>
+-    </features>
+-  </guest>
+-
+-</capabilities>
+diff --git a/tests/qemucaps2xmldata/all_1.6.0-1.xml b/tests/qemucaps2xmloutdata/caps_1.6.0.x86_64.xml
+similarity index 67%
+rename from tests/qemucaps2xmldata/all_1.6.0-1.xml
+rename to tests/qemucaps2xmloutdata/caps_1.6.0.x86_64.xml
+index efe86b9a12..b58f54fefd 100644
+--- a/tests/qemucaps2xmldata/all_1.6.0-1.xml
++++ b/tests/qemucaps2xmloutdata/caps_1.6.0.x86_64.xml
+@@ -2,7 +2,7 @@
+ 
+   <host>
+     <cpu>
+-      <arch>i686</arch>
++      <arch>x86_64</arch>
+     </cpu>
+     <power_management/>
+     <iommu support='no'/>
+@@ -10,12 +10,12 @@
+ 
+   <guest>
+     <os_type>hvm</os_type>
+-    <arch name='i686'>
+-      <wordsize>32</wordsize>
+-      <emulator>/usr/bin/qemu-system-i386</emulator>
++    <arch name='x86_64'>
++      <wordsize>64</wordsize>
++      <emulator>/usr/bin/qemu-system-x86_64</emulator>
+       <domain type='qemu'/>
+       <domain type='kvm'>
+-        <emulator>/usr/bin/qemu-system-i386</emulator>
++        <emulator>/usr/bin/qemu-system-x86_64</emulator>
+       </domain>
+     </arch>
+     <features>
+@@ -24,8 +24,6 @@
+       <disksnapshot default='on' toggle='no'/>
+       <acpi default='on' toggle='yes'/>
+       <apic default='on' toggle='no'/>
+-      <pae/>
+-      <nonpae/>
+     </features>
+   </guest>
+ 
+diff --git a/tests/qemucaps2xmltest.c b/tests/qemucaps2xmltest.c
+index 5b9152b04d..65dd97c0a4 100644
+--- a/tests/qemucaps2xmltest.c
++++ b/tests/qemucaps2xmltest.c
+@@ -32,7 +32,7 @@ typedef struct _testQemuData testQemuData;
+ typedef testQemuData *testQemuDataPtr;
+ struct _testQemuData {
+     const char *base;
+-    virArch guestarch;
++    const char *archName;
+ };
+ 
+ static virQEMUCapsPtr
+@@ -87,23 +87,28 @@ testGetCaps(char *capsData, const testQemuData *data)
+ {
+     virQEMUCapsPtr qemuCaps = NULL;
+     virCapsPtr caps = NULL;
++    virArch arch = virArchFromString(data->archName);
++    char *binary = NULL;
++
++    if (virAsprintf(&binary, "/usr/bin/qemu-system-%s", data->archName) < 0)
++        goto error;
+ 
+     if ((qemuCaps = testQemuGetCaps(capsData)) == NULL) {
+         fprintf(stderr, "failed to parse qemu capabilities flags");
+         goto error;
+     }
+ 
+-    if ((caps = virCapabilitiesNew(data->guestarch, false, false)) == NULL) {
++    if ((caps = virCapabilitiesNew(arch, false, false)) == NULL) {
+         fprintf(stderr, "failed to create the fake capabilities");
+         goto error;
+     }
+ 
+     if (virQEMUCapsInitGuestFromBinary(caps,
+-                                       "/usr/bin/qemu-system-i386",
++                                       binary,
+                                        qemuCaps,
+                                        NULL,
+                                        NULL,
+-                                       data->guestarch) < 0) {
++                                       arch) < 0) {
+         fprintf(stderr, "failed to create the capabilities from qemu");
+         goto error;
+     }
+@@ -114,6 +119,7 @@ testGetCaps(char *capsData, const testQemuData *data)
+  error:
+     virObjectUnref(qemuCaps);
+     virObjectUnref(caps);
++    VIR_FREE(binary);
+     return NULL;
+ }
+ 
+@@ -127,12 +133,12 @@ testQemuCapsXML(const void *opaque)
+     char *capsXml = NULL;
+     virCapsPtr capsProvided = NULL;
+ 
+-    if (virAsprintf(&xmlFile, "%s/qemucaps2xmldata/%s.xml",
+-                    abs_srcdir, data->base) < 0)
++    if (virAsprintf(&xmlFile, "%s/qemucaps2xmloutdata/%s.%s.xml",
++                    abs_srcdir, data->base, data->archName) < 0)
+         goto cleanup;
+ 
+-    if (virAsprintf(&capsFile, "%s/qemucaps2xmldata/%s.caps",
+-                    abs_srcdir, data->base) < 0)
++    if (virAsprintf(&capsFile, "%s/qemucapabilitiesdata/%s.%s.xml",
++                    abs_srcdir, data->base, data->archName) < 0)
+         goto cleanup;
+ 
+     if (virTestLoadFile(capsFile, &capsData) < 0)
+@@ -175,16 +181,13 @@ mymain(void)
+ 
+     virEventRegisterDefaultImpl();
+ 
+-#define DO_TEST_FULL(name, guest) \
++#define DO_TEST(arch, name) \
++    data.archName = arch; \
+     data.base = name; \
+-    data.guestarch = guest; \
+-    if (virTestRun(name, testQemuCapsXML, &data) < 0) \
++    if (virTestRun(name "(" arch ")", testQemuCapsXML, &data) < 0) \
+         ret = -1
+ 
+-#define DO_TEST(name) DO_TEST_FULL(name, VIR_ARCH_I686)
+-
+-    DO_TEST("all_1.6.0-1");
+-    DO_TEST("nodisksnapshot_1.6.0-1");
++    DO_TEST("x86_64", "caps_1.6.0");
+ 
+     return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+ }
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-tests-Update-capabilities-data-for-QEMU-3.0.0-x86_64.patch b/SOURCES/libvirt-tests-Update-capabilities-data-for-QEMU-3.0.0-x86_64.patch
new file mode 100644
index 0000000..e5016f6
--- /dev/null
+++ b/SOURCES/libvirt-tests-Update-capabilities-data-for-QEMU-3.0.0-x86_64.patch
@@ -0,0 +1,837 @@
+From 09f31ebb94ef3290c79a1c336d9bdd4e61d359a7 Mon Sep 17 00:00:00 2001
+Message-Id: <09f31ebb94ef3290c79a1c336d9bdd4e61d359a7@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:55 +0200
+Subject: [PATCH] tests: Update capabilities data for QEMU 3.0.0 x86_64
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The original capabilities didn't include a patched kernel for spectre,
+SPICE gl support and had xen support enabled which we already have
+dropped.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit aaf105da5997acf561cad23b3337c38324ba753b)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ .../caps_3.0.0.x86_64.replies                 | 211 +++++++++---------
+ .../caps_3.0.0.x86_64.xml                     |  57 ++---
+ 2 files changed, 127 insertions(+), 141 deletions(-)
+
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies
+index 257f0ecbe2..b2f8377248 100644
+--- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies
+@@ -17,11 +17,11 @@
+ {
+   "return": {
+     "qemu": {
+-      "micro": 50,
++      "micro": 90,
+       "minor": 12,
+       "major": 2
+     },
+-    "package": "v2.12.0-2284-gab3257c281"
++    "package": "v3.0.0-rc0-31-g633e824037"
+   },
+   "id": "libvirt-2"
+ }
+@@ -818,10 +818,6 @@
+       "name": "virtio-keyboard-pci",
+       "parent": "virtio-input-hid-pci"
+     },
+-    {
+-      "name": "xen-sysbus",
+-      "parent": "bus"
+-    },
+     {
+       "name": "i440FX",
+       "parent": "pci-device"
+@@ -854,10 +850,6 @@
+       "name": "chardev-pty",
+       "parent": "chardev"
+     },
+-    {
+-      "name": "xen-apic",
+-      "parent": "apic-common"
+-    },
+     {
+       "name": "SUNW,fdtwo",
+       "parent": "base-sysbus-fdc"
+@@ -918,6 +910,10 @@
+       "name": "qemu64-x86_64-cpu",
+       "parent": "x86_64-cpu"
+     },
++    {
++      "name": "PIIX3-xen",
++      "parent": "pci-piix3"
++    },
+     {
+       "name": "virtio-input-host-pci",
+       "parent": "virtio-input-pci"
+@@ -935,16 +931,16 @@
+       "parent": "e1000-base"
+     },
+     {
+-      "name": "PIIX3-xen",
+-      "parent": "pci-piix3"
++      "name": "ICH9-LPC",
++      "parent": "pci-device"
+     },
+     {
+       "name": "pc-i440fx-1.4-machine",
+       "parent": "generic-pc-machine"
+     },
+     {
+-      "name": "ICH9-LPC",
+-      "parent": "pci-device"
++      "name": "ich9-usb-uhci6",
++      "parent": "pci-uhci-usb"
+     },
+     {
+       "name": "sysbus-ahci",
+@@ -954,10 +950,6 @@
+       "name": "ich9-usb-uhci4",
+       "parent": "pci-uhci-usb"
+     },
+-    {
+-      "name": "ich9-usb-uhci6",
+-      "parent": "pci-uhci-usb"
+-    },
+     {
+       "name": "pc-q35-2.6-machine",
+       "parent": "generic-pc-machine"
+@@ -966,6 +958,10 @@
+       "name": "usb-mtp",
+       "parent": "usb-device"
+     },
++    {
++      "name": "ccid-card-emulated",
++      "parent": "ccid-card"
++    },
+     {
+       "name": "ich9-usb-uhci5",
+       "parent": "pci-uhci-usb"
+@@ -1118,10 +1114,6 @@
+       "name": "pc-testdev",
+       "parent": "isa-device"
+     },
+-    {
+-      "name": "xen-backend",
+-      "parent": "xen-sysdev"
+-    },
+     {
+       "name": "Haswell-noTSX-IBRS-x86_64-cpu",
+       "parent": "x86_64-cpu"
+@@ -1206,6 +1198,10 @@
+       "name": "isa-cirrus-vga",
+       "parent": "isa-device"
+     },
++    {
++      "name": "qio-channel-rdma",
++      "parent": "qio-channel"
++    },
+     {
+       "name": "vhost-vsock-device",
+       "parent": "virtio-device"
+@@ -1322,14 +1318,14 @@
+       "name": "chardev-msmouse",
+       "parent": "chardev"
+     },
+-    {
+-      "name": "chardev-pipe",
+-      "parent": "chardev-fd"
+-    },
+     {
+       "name": "pc-q35-2.9-machine",
+       "parent": "generic-pc-machine"
+     },
++    {
++      "name": "chardev-pipe",
++      "parent": "chardev-fd"
++    },
+     {
+       "name": "pc-i440fx-1.7-machine",
+       "parent": "generic-pc-machine"
+@@ -1515,33 +1511,37 @@
+       "parent": "pci-uhci-usb"
+     },
+     {
+-      "name": "chardev-file",
+-      "parent": "chardev-fd"
++      "name": "chardev-braille",
++      "parent": "chardev"
+     },
+     {
+-      "name": "pc-q35-2.10-machine",
+-      "parent": "generic-pc-machine"
++      "name": "chardev-file",
++      "parent": "chardev-fd"
+     },
+     {
+       "name": "intel-iommu",
+       "parent": "x86-iommu"
+     },
+     {
+-      "name": "PCIE",
+-      "parent": "PCI"
++      "name": "pc-q35-2.10-machine",
++      "parent": "generic-pc-machine"
+     },
+     {
+       "name": "tpm-tis",
+       "parent": "isa-device"
+     },
+     {
+-      "name": "xen-sysdev",
+-      "parent": "sys-bus-device"
++      "name": "PCIE",
++      "parent": "PCI"
+     },
+     {
+       "name": "pcie-pci-bridge",
+       "parent": "base-pci-bridge"
+     },
++    {
++      "name": "ccid-card-passthru",
++      "parent": "ccid-card"
++    },
+     {
+       "name": "qio-dns-resolver",
+       "parent": "object"
+@@ -1582,10 +1582,6 @@
+       "name": "ccid-bus",
+       "parent": "bus"
+     },
+-    {
+-      "name": "xenpv-machine",
+-      "parent": "machine"
+-    },
+     {
+       "name": "EPYC-IBPB-x86_64-cpu",
+       "parent": "x86_64-cpu"
+@@ -1922,10 +1918,6 @@
+       "name": "pc-i440fx-2.2-machine",
+       "parent": "generic-pc-machine"
+     },
+-    {
+-      "name": "xen-pci-passthrough",
+-      "parent": "pci-device"
+-    },
+     {
+       "name": "cryptodev-backend",
+       "parent": "object"
+@@ -2058,18 +2050,10 @@
+       "name": "virtio-scsi-pci",
+       "parent": "virtio-pci"
+     },
+-    {
+-      "name": "piix3-ide",
+-      "parent": "pci-ide"
+-    },
+     {
+       "name": "ES1370",
+       "parent": "pci-device"
+     },
+-    {
+-      "name": "xen-pvdevice",
+-      "parent": "pci-device"
+-    },
+     {
+       "name": "virtio-pci-bus",
+       "parent": "virtio-bus"
+@@ -2079,8 +2063,8 @@
+       "parent": "pcie-port"
+     },
+     {
+-      "name": "xenfv-machine",
+-      "parent": "generic-pc-machine"
++      "name": "piix3-ide",
++      "parent": "pci-ide"
+     },
+     {
+       "name": "pci-testdev",
+@@ -2134,10 +2118,6 @@
+       "name": "pc-i440fx-2.6-machine",
+       "parent": "generic-pc-machine"
+     },
+-    {
+-      "name": "xen-platform",
+-      "parent": "pci-device"
+-    },
+     {
+       "name": "chardev-serial",
+       "parent": "chardev-fd"
+@@ -2230,10 +2210,6 @@
+       "name": "isa-applesmc",
+       "parent": "isa-device"
+     },
+-    {
+-      "name": "xen-accel",
+-      "parent": "accel"
+-    },
+     {
+       "name": "secret",
+       "parent": "object"
+@@ -2386,6 +2362,10 @@
+       "name": "generic-sdhci",
+       "parent": "sys-bus-device"
+     },
++    {
++      "name": "pvrdma",
++      "parent": "pci-device"
++    },
+     {
+       "name": "isa-pit",
+       "parent": "pit-common"
+@@ -5199,11 +5179,6 @@
+       "name": "pc-i440fx-2.7",
+       "cpu-max": 255
+     },
+-    {
+-      "hotpluggable-cpus": true,
+-      "name": "xenfv",
+-      "cpu-max": 128
+-    },
+     {
+       "hotpluggable-cpus": true,
+       "name": "pc-i440fx-2.3",
+@@ -5250,11 +5225,6 @@
+       "cpu-max": 288,
+       "alias": "q35"
+     },
+-    {
+-      "hotpluggable-cpus": false,
+-      "name": "xenpv",
+-      "cpu-max": 1
+-    },
+     {
+       "hotpluggable-cpus": true,
+       "name": "pc-q35-2.10",
+@@ -5506,7 +5476,6 @@
+       "name": "Westmere-IBRS",
+       "typename": "Westmere-IBRS-x86_64-cpu",
+       "unavailable-features": [
+-        "spec-ctrl"
+       ],
+       "static": false,
+       "migration-safe": true
+@@ -5529,7 +5498,6 @@
+         "avx512cd",
+         "avx512bw",
+         "avx512vl",
+-        "spec-ctrl",
+         "avx512f",
+         "avx512f",
+         "avx512f"
+@@ -5558,7 +5526,6 @@
+       "name": "Skylake-Client-IBRS",
+       "typename": "Skylake-Client-IBRS-x86_64-cpu",
+       "unavailable-features": [
+-        "spec-ctrl"
+       ],
+       "static": false,
+       "migration-safe": true
+@@ -5575,7 +5542,6 @@
+       "name": "SandyBridge-IBRS",
+       "typename": "SandyBridge-IBRS-x86_64-cpu",
+       "unavailable-features": [
+-        "spec-ctrl"
+       ],
+       "static": false,
+       "migration-safe": true
+@@ -5651,7 +5617,6 @@
+       "name": "Nehalem-IBRS",
+       "typename": "Nehalem-IBRS-x86_64-cpu",
+       "unavailable-features": [
+-        "spec-ctrl"
+       ],
+       "static": false,
+       "migration-safe": true
+@@ -5686,7 +5651,6 @@
+       "name": "IvyBridge-IBRS",
+       "typename": "IvyBridge-IBRS-x86_64-cpu",
+       "unavailable-features": [
+-        "spec-ctrl"
+       ],
+       "static": false,
+       "migration-safe": true
+@@ -5703,7 +5667,6 @@
+       "name": "Haswell-noTSX-IBRS",
+       "typename": "Haswell-noTSX-IBRS-x86_64-cpu",
+       "unavailable-features": [
+-        "spec-ctrl"
+       ],
+       "static": false,
+       "migration-safe": true
+@@ -5720,7 +5683,6 @@
+       "name": "Haswell-IBRS",
+       "typename": "Haswell-IBRS-x86_64-cpu",
+       "unavailable-features": [
+-        "spec-ctrl"
+       ],
+       "static": false,
+       "migration-safe": true
+@@ -5776,7 +5738,6 @@
+       "name": "Broadwell-noTSX-IBRS",
+       "typename": "Broadwell-noTSX-IBRS-x86_64-cpu",
+       "unavailable-features": [
+-        "spec-ctrl"
+       ],
+       "static": false,
+       "migration-safe": true
+@@ -5793,7 +5754,6 @@
+       "name": "Broadwell-IBRS",
+       "typename": "Broadwell-IBRS-x86_64-cpu",
+       "unavailable-features": [
+-        "spec-ctrl"
+       ],
+       "static": false,
+       "migration-safe": true
+@@ -5977,6 +5937,14 @@
+     },
+     {
+       "parameters": [
++        {
++          "name": "rendernode",
++          "type": "string"
++        },
++        {
++          "name": "gl",
++          "type": "boolean"
++        },
+         {
+           "name": "head",
+           "type": "number"
+@@ -6903,6 +6871,36 @@
+           "help": "file name",
+           "type": "string"
+         },
++        {
++          "name": "serial",
++          "help": "disk serial number",
++          "type": "string"
++        },
++        {
++          "name": "addr",
++          "help": "pci address (virtio only)",
++          "type": "string"
++        },
++        {
++          "name": "trans",
++          "help": "chs translation (auto, lba, none)",
++          "type": "string"
++        },
++        {
++          "name": "secs",
++          "help": "number of sectors (ide disk geometry)",
++          "type": "number"
++        },
++        {
++          "name": "heads",
++          "help": "number of heads (ide disk geometry)",
++          "type": "number"
++        },
++        {
++          "name": "cyls",
++          "help": "number of cylinders (ide disk geometry)",
++          "type": "number"
++        },
+         {
+           "name": "if",
+           "help": "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
+@@ -18406,6 +18404,11 @@
+           "name": "inactive-l2",
+           "default": null,
+           "type": "bool"
++        },
++        {
++          "name": "bitmap-directory",
++          "default": null,
++          "type": "bool"
+         }
+       ],
+       "meta-type": "object"
+@@ -19557,7 +19560,7 @@
+         "osvw": false,
+         "apic": true,
+         "pmm": false,
+-        "spec-ctrl": false,
++        "spec-ctrl": true,
+         "tsc-adjust": true,
+         "kvm-steal-time": true,
+         "kvmclock": true,
+@@ -19578,7 +19581,7 @@
+         "vaes": false,
+         "xsaves": true,
+         "lm": true,
+-        "umip": false,
++        "umip": true,
+         "pse": true,
+         "avx2": true,
+         "sep": true,
+@@ -19610,12 +19613,12 @@
+         "rdseed": true,
+         "avx512-4vnniw": false,
+         "vme": true,
+-        "vmx": false,
++        "vmx": true,
+         "dtes64": false,
+         "mtrr": true,
+         "rdtscp": true,
+         "pse36": true,
+-        "kvm-pv-tlb-flush": false,
++        "kvm-pv-tlb-flush": true,
+         "tbm": false,
+         "wdt": false,
+         "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
+@@ -19752,7 +19755,7 @@
+         "osvw": false,
+         "apic": true,
+         "pmm": false,
+-        "spec-ctrl": false,
++        "spec-ctrl": true,
+         "tsc-adjust": true,
+         "kvm-steal-time": true,
+         "kvmclock": true,
+@@ -19773,7 +19776,7 @@
+         "vaes": false,
+         "xsaves": true,
+         "lm": true,
+-        "umip": false,
++        "umip": true,
+         "pse": true,
+         "avx2": true,
+         "sep": true,
+@@ -19805,12 +19808,12 @@
+         "rdseed": true,
+         "avx512-4vnniw": false,
+         "vme": true,
+-        "vmx": false,
++        "vmx": true,
+         "dtes64": false,
+         "mtrr": true,
+         "rdtscp": true,
+         "pse36": true,
+-        "kvm-pv-tlb-flush": false,
++        "kvm-pv-tlb-flush": true,
+         "tbm": false,
+         "wdt": false,
+         "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
+@@ -19992,7 +19995,7 @@
+         "pmu": false,
+         "pmm": false,
+         "apic": true,
+-        "spec-ctrl": false,
++        "spec-ctrl": true,
+         "min-xlevel2": 0,
+         "tsc-adjust": true,
+         "tsc_adjust": true,
+@@ -20019,7 +20022,7 @@
+         "xsaves": true,
+         "tcg-cpuid": true,
+         "lm": true,
+-        "umip": false,
++        "umip": true,
+         "pse": true,
+         "avx2": true,
+         "sep": true,
+@@ -20065,13 +20068,13 @@
+         "rdrand": true,
+         "rdseed": true,
+         "avx512-4vnniw": false,
+-        "vmx": false,
++        "vmx": true,
+         "vme": true,
+         "dtes64": false,
+         "mtrr": true,
+         "rdtscp": true,
+         "pse36": true,
+-        "kvm-pv-tlb-flush": false,
++        "kvm-pv-tlb-flush": true,
+         "tbm": false,
+         "wdt": false,
+         "pause_filter": false,
+@@ -20221,7 +20224,7 @@
+         "osvw": false,
+         "apic": true,
+         "pmm": false,
+-        "spec-ctrl": false,
++        "spec-ctrl": true,
+         "tsc-adjust": true,
+         "kvm-steal-time": true,
+         "kvmclock": true,
+@@ -20242,7 +20245,7 @@
+         "vaes": false,
+         "xsaves": true,
+         "lm": true,
+-        "umip": false,
++        "umip": true,
+         "pse": true,
+         "avx2": true,
+         "sep": true,
+@@ -20274,12 +20277,12 @@
+         "rdseed": true,
+         "avx512-4vnniw": false,
+         "vme": true,
+-        "vmx": false,
++        "vmx": true,
+         "dtes64": false,
+         "mtrr": true,
+         "rdtscp": true,
+         "pse36": true,
+-        "kvm-pv-tlb-flush": false,
++        "kvm-pv-tlb-flush": true,
+         "tbm": false,
+         "wdt": false,
+         "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
+@@ -20416,7 +20419,7 @@
+         "osvw": false,
+         "apic": true,
+         "pmm": false,
+-        "spec-ctrl": false,
++        "spec-ctrl": true,
+         "tsc-adjust": true,
+         "kvm-steal-time": true,
+         "kvmclock": true,
+@@ -20437,7 +20440,7 @@
+         "vaes": false,
+         "xsaves": true,
+         "lm": true,
+-        "umip": false,
++        "umip": true,
+         "pse": true,
+         "avx2": true,
+         "sep": true,
+@@ -20469,12 +20472,12 @@
+         "rdseed": true,
+         "avx512-4vnniw": false,
+         "vme": true,
+-        "vmx": false,
++        "vmx": true,
+         "dtes64": false,
+         "mtrr": true,
+         "rdtscp": true,
+         "pse36": true,
+-        "kvm-pv-tlb-flush": false,
++        "kvm-pv-tlb-flush": true,
+         "tbm": false,
+         "wdt": false,
+         "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
+@@ -20656,7 +20659,7 @@
+         "pmu": false,
+         "pmm": false,
+         "apic": true,
+-        "spec-ctrl": false,
++        "spec-ctrl": true,
+         "min-xlevel2": 0,
+         "tsc-adjust": true,
+         "tsc_adjust": true,
+@@ -20683,7 +20686,7 @@
+         "xsaves": true,
+         "tcg-cpuid": true,
+         "lm": true,
+-        "umip": false,
++        "umip": true,
+         "pse": true,
+         "avx2": true,
+         "sep": true,
+@@ -20729,13 +20732,13 @@
+         "rdrand": true,
+         "rdseed": true,
+         "avx512-4vnniw": false,
+-        "vmx": false,
++        "vmx": true,
+         "vme": true,
+         "dtes64": false,
+         "mtrr": true,
+         "rdtscp": true,
+         "pse36": true,
+-        "kvm-pv-tlb-flush": false,
++        "kvm-pv-tlb-flush": true,
+         "tbm": false,
+         "wdt": false,
+         "pause_filter": false,
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+index d7c25c65dd..cd036d9323 100644
+--- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+@@ -8,6 +8,8 @@
+   <flag name='spice'/>
+   <flag name='boot-index'/>
+   <flag name='hda-duplex'/>
++  <flag name='ccid-emulated'/>
++  <flag name='ccid-passthru'/>
+   <flag name='virtio-tx-alg'/>
+   <flag name='virtio-blk-pci.ioeventfd'/>
+   <flag name='sga'/>
+@@ -131,6 +133,7 @@
+   <flag name='vserport-change-event'/>
+   <flag name='virtio-balloon-pci.deflate-on-oom'/>
+   <flag name='mptsas1068'/>
++  <flag name='spice-gl'/>
+   <flag name='qxl.vram64_size_mb'/>
+   <flag name='chardev-logfile'/>
+   <flag name='debug-threads'/>
+@@ -160,6 +163,7 @@
+   <flag name='drive-iotune-group'/>
+   <flag name='query-cpu-model-expansion'/>
+   <flag name='virtio-net.host_mtu'/>
++  <flag name='spice-rendernode'/>
+   <flag name='nvdimm'/>
+   <flag name='pcie-root-port'/>
+   <flag name='query-cpu-definitions'/>
+@@ -210,10 +214,10 @@
+   <flag name='mch.extended-tseg-mbytes'/>
+   <flag name='sev-guest'/>
+   <flag name='usb-storage.werror'/>
+-  <version>2012050</version>
++  <version>2012090</version>
+   <kvmVersion>0</kvmVersion>
+-  <microcodeVersion>437827</microcodeVersion>
+-  <package>v2.12.0-2284-gab3257c281</package>
++  <microcodeVersion>438109</microcodeVersion>
++  <package>v3.0.0-rc0-31-g633e824037</package>
+   <arch>x86_64</arch>
+   <hostCPU type='kvm' model='base' migratability='yes'>
+     <property name='phys-bits' type='number' value='0'/>
+@@ -379,7 +383,7 @@
+     <property name='pmu' type='boolean' value='false'/>
+     <property name='pmm' type='boolean' value='false'/>
+     <property name='apic' type='boolean' value='true' migratable='yes'/>
+-    <property name='spec-ctrl' type='boolean' value='false'/>
++    <property name='spec-ctrl' type='boolean' value='true' migratable='yes'/>
+     <property name='min-xlevel2' type='number' value='0'/>
+     <property name='tsc-adjust' type='boolean' value='true' migratable='yes'/>
+     <property name='tsc_adjust' type='boolean' value='true' migratable='yes'/>
+@@ -406,7 +410,7 @@
+     <property name='xsaves' type='boolean' value='true' migratable='yes'/>
+     <property name='tcg-cpuid' type='boolean' value='true' migratable='yes'/>
+     <property name='lm' type='boolean' value='true' migratable='yes'/>
+-    <property name='umip' type='boolean' value='false'/>
++    <property name='umip' type='boolean' value='true' migratable='yes'/>
+     <property name='pse' type='boolean' value='true' migratable='yes'/>
+     <property name='avx2' type='boolean' value='true' migratable='yes'/>
+     <property name='sep' type='boolean' value='true' migratable='yes'/>
+@@ -452,13 +456,13 @@
+     <property name='rdrand' type='boolean' value='true' migratable='yes'/>
+     <property name='rdseed' type='boolean' value='true' migratable='yes'/>
+     <property name='avx512-4vnniw' type='boolean' value='false'/>
+-    <property name='vmx' type='boolean' value='false'/>
++    <property name='vmx' type='boolean' value='true' migratable='yes'/>
+     <property name='vme' type='boolean' value='true' migratable='yes'/>
+     <property name='dtes64' type='boolean' value='false'/>
+     <property name='mtrr' type='boolean' value='true' migratable='yes'/>
+     <property name='rdtscp' type='boolean' value='true' migratable='yes'/>
+     <property name='pse36' type='boolean' value='true' migratable='yes'/>
+-    <property name='kvm-pv-tlb-flush' type='boolean' value='false'/>
++    <property name='kvm-pv-tlb-flush' type='boolean' value='true' migratable='yes'/>
+     <property name='tbm' type='boolean' value='false'/>
+     <property name='wdt' type='boolean' value='false'/>
+     <property name='pause_filter' type='boolean' value='false'/>
+@@ -747,9 +751,7 @@
+     <blocker name='3dnowext'/>
+     <blocker name='3dnow'/>
+   </cpu>
+-  <cpu type='kvm' name='Westmere-IBRS' usable='no'>
+-    <blocker name='spec-ctrl'/>
+-  </cpu>
++  <cpu type='kvm' name='Westmere-IBRS' usable='yes'/>
+   <cpu type='kvm' name='Westmere' usable='yes'/>
+   <cpu type='kvm' name='Skylake-Server-IBRS' usable='no'>
+     <blocker name='avx512f'/>
+@@ -758,7 +760,6 @@
+     <blocker name='avx512cd'/>
+     <blocker name='avx512bw'/>
+     <blocker name='avx512vl'/>
+-    <blocker name='spec-ctrl'/>
+     <blocker name='avx512f'/>
+     <blocker name='avx512f'/>
+     <blocker name='avx512f'/>
+@@ -774,13 +775,9 @@
+     <blocker name='avx512f'/>
+     <blocker name='avx512f'/>
+   </cpu>
+-  <cpu type='kvm' name='Skylake-Client-IBRS' usable='no'>
+-    <blocker name='spec-ctrl'/>
+-  </cpu>
++  <cpu type='kvm' name='Skylake-Client-IBRS' usable='yes'/>
+   <cpu type='kvm' name='Skylake-Client' usable='yes'/>
+-  <cpu type='kvm' name='SandyBridge-IBRS' usable='no'>
+-    <blocker name='spec-ctrl'/>
+-  </cpu>
++  <cpu type='kvm' name='SandyBridge-IBRS' usable='yes'/>
+   <cpu type='kvm' name='SandyBridge' usable='yes'/>
+   <cpu type='kvm' name='Penryn' usable='yes'/>
+   <cpu type='kvm' name='Opteron_G5' usable='no'>
+@@ -802,9 +799,7 @@
+   </cpu>
+   <cpu type='kvm' name='Opteron_G2' usable='yes'/>
+   <cpu type='kvm' name='Opteron_G1' usable='yes'/>
+-  <cpu type='kvm' name='Nehalem-IBRS' usable='no'>
+-    <blocker name='spec-ctrl'/>
+-  </cpu>
++  <cpu type='kvm' name='Nehalem-IBRS' usable='yes'/>
+   <cpu type='kvm' name='Nehalem' usable='yes'/>
+   <cpu type='kvm' name='KnightsMill' usable='no'>
+     <blocker name='avx512f'/>
+@@ -818,17 +813,11 @@
+     <blocker name='avx512f'/>
+     <blocker name='avx512f'/>
+   </cpu>
+-  <cpu type='kvm' name='IvyBridge-IBRS' usable='no'>
+-    <blocker name='spec-ctrl'/>
+-  </cpu>
++  <cpu type='kvm' name='IvyBridge-IBRS' usable='yes'/>
+   <cpu type='kvm' name='IvyBridge' usable='yes'/>
+-  <cpu type='kvm' name='Haswell-noTSX-IBRS' usable='no'>
+-    <blocker name='spec-ctrl'/>
+-  </cpu>
++  <cpu type='kvm' name='Haswell-noTSX-IBRS' usable='yes'/>
+   <cpu type='kvm' name='Haswell-noTSX' usable='yes'/>
+-  <cpu type='kvm' name='Haswell-IBRS' usable='no'>
+-    <blocker name='spec-ctrl'/>
+-  </cpu>
++  <cpu type='kvm' name='Haswell-IBRS' usable='yes'/>
+   <cpu type='kvm' name='Haswell' usable='yes'/>
+   <cpu type='kvm' name='EPYC-IBPB' usable='no'>
+     <blocker name='sha-ni'/>
+@@ -850,13 +839,9 @@
+     <blocker name='osvw'/>
+   </cpu>
+   <cpu type='kvm' name='Conroe' usable='yes'/>
+-  <cpu type='kvm' name='Broadwell-noTSX-IBRS' usable='no'>
+-    <blocker name='spec-ctrl'/>
+-  </cpu>
++  <cpu type='kvm' name='Broadwell-noTSX-IBRS' usable='yes'/>
+   <cpu type='kvm' name='Broadwell-noTSX' usable='yes'/>
+-  <cpu type='kvm' name='Broadwell-IBRS' usable='no'>
+-    <blocker name='spec-ctrl'/>
+-  </cpu>
++  <cpu type='kvm' name='Broadwell-IBRS' usable='yes'/>
+   <cpu type='kvm' name='Broadwell' usable='yes'/>
+   <cpu type='kvm' name='486' usable='yes'/>
+   <cpu type='tcg' name='max' usable='yes'/>
+@@ -1180,7 +1165,6 @@
+   <machine name='pc-i440fx-2.9' hotplugCpus='yes' maxCpus='255'/>
+   <machine name='pc-i440fx-2.6' hotplugCpus='yes' maxCpus='255'/>
+   <machine name='pc-i440fx-2.7' hotplugCpus='yes' maxCpus='255'/>
+-  <machine name='xenfv' hotplugCpus='yes' maxCpus='128'/>
+   <machine name='pc-i440fx-2.3' hotplugCpus='yes' maxCpus='255'/>
+   <machine name='pc-i440fx-2.4' hotplugCpus='yes' maxCpus='255'/>
+   <machine name='pc-i440fx-2.5' hotplugCpus='yes' maxCpus='255'/>
+@@ -1190,7 +1174,6 @@
+   <machine name='pc-q35-2.11' hotplugCpus='yes' maxCpus='288'/>
+   <machine name='pc-q35-2.12' hotplugCpus='yes' maxCpus='288'/>
+   <machine name='pc-q35-3.0' alias='q35' hotplugCpus='yes' maxCpus='288'/>
+-  <machine name='xenpv' maxCpus='1'/>
+   <machine name='pc-q35-2.10' hotplugCpus='yes' maxCpus='288'/>
+   <machine name='pc-i440fx-1.7' hotplugCpus='yes' maxCpus='255'/>
+   <machine name='pc-q35-2.9' hotplugCpus='yes' maxCpus='288'/>
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-extract-hugepages-numa-default-dimm-out-of-hugepages-numa.patch b/SOURCES/libvirt-tests-extract-hugepages-numa-default-dimm-out-of-hugepages-numa.patch
new file mode 100644
index 0000000..f75d6e3
--- /dev/null
+++ b/SOURCES/libvirt-tests-extract-hugepages-numa-default-dimm-out-of-hugepages-numa.patch
@@ -0,0 +1,207 @@
+From b25627269a94eb7fca6336bd97f4484818897f76 Mon Sep 17 00:00:00 2001
+Message-Id: <b25627269a94eb7fca6336bd97f4484818897f76@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:37 +0200
+Subject: [PATCH] tests: extract hugepages-numa-default-dimm out of
+ hugepages-numa
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit c8a8c7ebbabb0d96bf18a7e75e99efbd8ccc6d50)
+
+Conflicts:
+    tests/qemuxml2argvdata/hugepages-numa-default-dimm.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ .../hugepages-numa-default-dimm.args          | 31 +++++++++++++
+ .../hugepages-numa-default-dimm.xml           | 45 +++++++++++++++++++
+ tests/qemuxml2argvdata/hugepages-numa.args    |  6 +--
+ tests/qemuxml2argvdata/hugepages-numa.xml     | 11 -----
+ tests/qemuxml2argvtest.c                      |  2 +
+ .../hugepages-numa-default-dimm.xml           |  1 +
+ tests/qemuxml2xmltest.c                       |  1 +
+ 7 files changed, 81 insertions(+), 16 deletions(-)
+ create mode 100644 tests/qemuxml2argvdata/hugepages-numa-default-dimm.args
+ create mode 100644 tests/qemuxml2argvdata/hugepages-numa-default-dimm.xml
+ create mode 120000 tests/qemuxml2xmloutdata/hugepages-numa-default-dimm.xml
+
+diff --git a/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args b/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args
+new file mode 100644
+index 0000000000..855966a137
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args
+@@ -0,0 +1,31 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-x86_64 \
++-name fedora \
++-S \
++-machine pc-i440fx-2.3,accel=tcg,usb=off,dump-guest-core=off \
++-m size=1048576k,slots=16,maxmem=1099511627776k \
++-smp 2,sockets=2,cores=1,threads=1 \
++-mem-prealloc \
++-mem-path /dev/hugepages2M/libvirt/qemu/-1-fedora \
++-numa node,nodeid=0,cpus=0-1,mem=1024 \
++-object memory-backend-file,id=memdimm0,prealloc=yes,\
++mem-path=/dev/hugepages1G/libvirt/qemu/-1-fedora,size=1073741824,\
++host-nodes=1-3,policy=bind \
++-device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
++-uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
++-display none \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-fedora/monitor.sock,\
++server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot c \
++-usb
+diff --git a/tests/qemuxml2argvdata/hugepages-numa-default-dimm.xml b/tests/qemuxml2argvdata/hugepages-numa-default-dimm.xml
+new file mode 100644
+index 0000000000..14a3368678
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hugepages-numa-default-dimm.xml
+@@ -0,0 +1,45 @@
++<domain type='qemu'>
++  <name>fedora</name>
++  <uuid>63840878-0deb-4095-97e6-fc444d9bc9fa</uuid>
++  <maxMemory slots='16' unit='KiB'>1099511627776</maxMemory>
++  <memory unit='KiB'>1572863</memory>
++  <currentMemory unit='KiB'>1048576</currentMemory>
++  <memoryBacking>
++    <hugepages/>
++  </memoryBacking>
++  <vcpu placement='static'>2</vcpu>
++  <os>
++    <type arch='x86_64' machine='pc-i440fx-2.3'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <cpu>
++    <numa>
++      <cell id='0' cpus='0-1' memory='1048576' unit='KiB'/>
++    </numa>
++  </cpu>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-x86_64</emulator>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <memballoon model='none'/>
++    <memory model='dimm'>
++      <source>
++        <nodemask>1-3</nodemask>
++        <pagesize unit='KiB'>1048576</pagesize>
++      </source>
++      <target>
++        <size unit='KiB'>1048576</size>
++        <node>0</node>
++      </target>
++      <address type='dimm' slot='0'/>
++    </memory>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvdata/hugepages-numa.args b/tests/qemuxml2argvdata/hugepages-numa.args
+index aa834f5511..20c7802fd8 100644
+--- a/tests/qemuxml2argvdata/hugepages-numa.args
++++ b/tests/qemuxml2argvdata/hugepages-numa.args
+@@ -8,15 +8,11 @@ QEMU_AUDIO_DRV=spice \
+ -name fedora \
+ -S \
+ -machine pc-i440fx-2.3,accel=tcg,usb=off,dump-guest-core=off \
+--m size=1048576k,slots=16,maxmem=1099511627776k \
++-m 1024 \
+ -smp 2,sockets=2,cores=1,threads=1 \
+ -mem-prealloc \
+ -mem-path /dev/hugepages2M/libvirt/qemu/-1-fedora \
+ -numa node,nodeid=0,cpus=0-1,mem=1024 \
+--object memory-backend-file,id=memdimm0,prealloc=yes,\
+-mem-path=/dev/hugepages1G/libvirt/qemu/-1-fedora,size=1073741824,\
+-host-nodes=1-3,policy=bind \
+--device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
+ -uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
+ -no-user-config \
+ -nodefaults \
+diff --git a/tests/qemuxml2argvdata/hugepages-numa.xml b/tests/qemuxml2argvdata/hugepages-numa.xml
+index eef471b4ec..d3c6308be0 100644
+--- a/tests/qemuxml2argvdata/hugepages-numa.xml
++++ b/tests/qemuxml2argvdata/hugepages-numa.xml
+@@ -1,7 +1,6 @@
+ <domain type='qemu'>
+   <name>fedora</name>
+   <uuid>63840878-0deb-4095-97e6-fc444d9bc9fa</uuid>
+-  <maxMemory slots='16' unit='KiB'>1099511627776</maxMemory>
+   <memory unit='KiB'>1572863</memory>
+   <currentMemory unit='KiB'>1048576</currentMemory>
+   <memoryBacking>
+@@ -97,15 +96,5 @@
+     <memballoon model='virtio'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
+     </memballoon>
+-    <memory model='dimm'>
+-      <source>
+-        <nodemask>1-3</nodemask>
+-        <pagesize unit='KiB'>1048576</pagesize>
+-      </source>
+-      <target>
+-        <size unit='KiB'>1048576</size>
+-        <node>0</node>
+-      </target>
+-    </memory>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 01553ada38..a97b48525a 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -953,6 +953,8 @@ mymain(void)
+             QEMU_CAPS_SPICE,
+             QEMU_CAPS_DEVICE_QXL,
+             QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_REDIR,
++            QEMU_CAPS_OBJECT_MEMORY_FILE);
++    DO_TEST("hugepages-numa-default-dimm",
+             QEMU_CAPS_DEVICE_PC_DIMM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-pages",
+diff --git a/tests/qemuxml2xmloutdata/hugepages-numa-default-dimm.xml b/tests/qemuxml2xmloutdata/hugepages-numa-default-dimm.xml
+new file mode 120000
+index 0000000000..8fa2b323aa
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/hugepages-numa-default-dimm.xml
+@@ -0,0 +1 @@
++../qemuxml2argvdata/hugepages-numa-default-dimm.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index f0cabc422d..5900f4de61 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -331,6 +331,7 @@ mymain(void)
+     DO_TEST("pmu-feature-off", NONE);
+ 
+     DO_TEST("hugepages-default", NONE);
++    DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-pages", NONE);
+     DO_TEST("hugepages-pages2", NONE);
+     DO_TEST("hugepages-pages3", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-extract-pages-discard-hugepages-out-of-hugepages-pages3.patch b/SOURCES/libvirt-tests-extract-pages-discard-hugepages-out-of-hugepages-pages3.patch
new file mode 100644
index 0000000..28a4dfe
--- /dev/null
+++ b/SOURCES/libvirt-tests-extract-pages-discard-hugepages-out-of-hugepages-pages3.patch
@@ -0,0 +1,203 @@
+From 75affd738b5f6024066cf8023ccd7fa145828144 Mon Sep 17 00:00:00 2001
+Message-Id: <75affd738b5f6024066cf8023ccd7fa145828144@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:43 +0200
+Subject: [PATCH] tests: extract pages-discard-hugepages out of
+ hugepages-pages3
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Similar thing happens as for pages-discard, it is not passed to QEMU.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 9a6674c0ff5c5857fcf9b8e5aded1f524cf75d44)
+
+Conflicts:
+    tests/qemuxml2argvdata/pages-discard-hugepages.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ tests/qemuxml2argvdata/hugepages-pages3.args  |  3 +-
+ tests/qemuxml2argvdata/hugepages-pages3.xml   |  4 +--
+ .../pages-discard-hugepages.args              | 28 +++++++++++++++
+ .../pages-discard-hugepages.xml               | 34 +++++++++++++++++++
+ tests/qemuxml2argvtest.c                      |  7 ++--
+ tests/qemuxml2xmloutdata/hugepages-pages3.xml |  4 +--
+ .../pages-discard-hugepages.xml               |  1 +
+ tests/qemuxml2xmltest.c                       |  1 +
+ 8 files changed, 74 insertions(+), 8 deletions(-)
+ create mode 100644 tests/qemuxml2argvdata/pages-discard-hugepages.args
+ create mode 100644 tests/qemuxml2argvdata/pages-discard-hugepages.xml
+ create mode 120000 tests/qemuxml2xmloutdata/pages-discard-hugepages.xml
+
+diff --git a/tests/qemuxml2argvdata/hugepages-pages3.args b/tests/qemuxml2argvdata/hugepages-pages3.args
+index d55265cdd8..2fc701ca22 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages3.args
++++ b/tests/qemuxml2argvdata/hugepages-pages3.args
+@@ -13,8 +13,7 @@ QEMU_AUDIO_DRV=none \
+ -object memory-backend-ram,id=ram-node0,size=268435456 \
+ -numa node,nodeid=0,cpus=0,memdev=ram-node0 \
+ -object memory-backend-file,id=ram-node1,prealloc=yes,\
+-mem-path=/dev/hugepages1G/libvirt/qemu/-1-SomeDummyHugepagesGu,\
+-discard-data=yes,size=805306368 \
++mem-path=/dev/hugepages1G/libvirt/qemu/-1-SomeDummyHugepagesGu,size=805306368 \
+ -numa node,nodeid=1,cpus=1,memdev=ram-node1 \
+ -uuid ef1bdff4-27f3-4e85-a807-5fb4d58463cc \
+ -display none \
+diff --git a/tests/qemuxml2argvdata/hugepages-pages3.xml b/tests/qemuxml2argvdata/hugepages-pages3.xml
+index 147acc4c95..3d3b3f3cc3 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages3.xml
++++ b/tests/qemuxml2argvdata/hugepages-pages3.xml
+@@ -15,8 +15,8 @@
+   </os>
+   <cpu>
+     <numa>
+-      <cell id='0' cpus='0' memory='262144' unit='KiB' discard='no'/>
+-      <cell id='1' cpus='1' memory='786432' unit='KiB' discard='yes'/>
++      <cell id='0' cpus='0' memory='262144' unit='KiB'/>
++      <cell id='1' cpus='1' memory='786432' unit='KiB'/>
+     </numa>
+   </cpu>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2argvdata/pages-discard-hugepages.args b/tests/qemuxml2argvdata/pages-discard-hugepages.args
+new file mode 100644
+index 0000000000..2dfacefe4a
+--- /dev/null
++++ b/tests/qemuxml2argvdata/pages-discard-hugepages.args
+@@ -0,0 +1,28 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name SomeDummyHugepagesGuest \
++-S \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 1024 \
++-smp 2,sockets=2,cores=1,threads=1 \
++-mem-prealloc \
++-mem-path /dev/hugepages2M/libvirt/qemu/-1-SomeDummyHugepagesGu \
++-numa node,nodeid=0,cpus=0,mem=256 \
++-numa node,nodeid=1,cpus=1,mem=768 \
++-uuid ef1bdff4-27f3-4e85-a807-5fb4d58463cc \
++-display none \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,\
++path=/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot c \
++-usb
+diff --git a/tests/qemuxml2argvdata/pages-discard-hugepages.xml b/tests/qemuxml2argvdata/pages-discard-hugepages.xml
+new file mode 100644
+index 0000000000..d1620d1946
+--- /dev/null
++++ b/tests/qemuxml2argvdata/pages-discard-hugepages.xml
+@@ -0,0 +1,34 @@
++<domain type='qemu'>
++  <name>SomeDummyHugepagesGuest</name>
++  <uuid>ef1bdff4-27f3-4e85-a807-5fb4d58463cc</uuid>
++  <memory unit='KiB'>1048576</memory>
++  <currentMemory unit='KiB'>1048576</currentMemory>
++  <memoryBacking>
++    <hugepages/>
++  </memoryBacking>
++  <vcpu placement='static'>2</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <cpu>
++    <numa>
++      <cell id='0' cpus='0' memory='262144' unit='KiB' discard='no'/>
++      <cell id='1' cpus='1' memory='786432' unit='KiB' discard='yes'/>
++    </numa>
++  </cpu>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 6a79918f67..a95d2c1915 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -948,6 +948,10 @@ mymain(void)
+     DO_TEST("pages-discard",
+             QEMU_CAPS_OBJECT_MEMORY_FILE,
+             QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
++    DO_TEST("pages-discard-hugepages",
++            QEMU_CAPS_OBJECT_MEMORY_RAM,
++            QEMU_CAPS_OBJECT_MEMORY_FILE,
++            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-numa-default",
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+@@ -961,8 +965,7 @@ mymain(void)
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-pages3", QEMU_CAPS_OBJECT_MEMORY_RAM,
+-            QEMU_CAPS_OBJECT_MEMORY_FILE,
+-            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
++            QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-shared",
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+diff --git a/tests/qemuxml2xmloutdata/hugepages-pages3.xml b/tests/qemuxml2xmloutdata/hugepages-pages3.xml
+index 90e6efa5ea..be21c3eddd 100644
+--- a/tests/qemuxml2xmloutdata/hugepages-pages3.xml
++++ b/tests/qemuxml2xmloutdata/hugepages-pages3.xml
+@@ -15,8 +15,8 @@
+   </os>
+   <cpu>
+     <numa>
+-      <cell id='0' cpus='0' memory='262144' unit='KiB' discard='no'/>
+-      <cell id='1' cpus='1' memory='786432' unit='KiB' discard='yes'/>
++      <cell id='0' cpus='0' memory='262144' unit='KiB'/>
++      <cell id='1' cpus='1' memory='786432' unit='KiB'/>
+     </numa>
+   </cpu>
+   <clock offset='utc'/>
+diff --git a/tests/qemuxml2xmloutdata/pages-discard-hugepages.xml b/tests/qemuxml2xmloutdata/pages-discard-hugepages.xml
+new file mode 120000
+index 0000000000..3d2f0682dc
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/pages-discard-hugepages.xml
+@@ -0,0 +1 @@
++../qemuxml2argvdata/pages-discard-hugepages.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index a4448ff168..83c0ffdfe2 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -331,6 +331,7 @@ mymain(void)
+     DO_TEST("pmu-feature-off", NONE);
+ 
+     DO_TEST("pages-discard", NONE);
++    DO_TEST("pages-discard-hugepages", NONE);
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-numa-default-2M", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-extract-pages-discard-out-of-hugepages-pages.patch b/SOURCES/libvirt-tests-extract-pages-discard-out-of-hugepages-pages.patch
new file mode 100644
index 0000000..7b4d2ec
--- /dev/null
+++ b/SOURCES/libvirt-tests-extract-pages-discard-out-of-hugepages-pages.patch
@@ -0,0 +1,234 @@
+From d4bb90f58723489d9e25c09f4b709130d59d0274 Mon Sep 17 00:00:00 2001
+Message-Id: <d4bb90f58723489d9e25c09f4b709130d59d0274@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:40 +0200
+Subject: [PATCH] tests: extract pages-discard out of hugepages-pages
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+>From the args output you can see that the 'discard' feature is not
+honored if you don't use hugepages, that is a bug, following patche
+will fix it.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit aa6a5e09953fea6d379dcb3a330a3fb6d0cf0a0b)
+
+Conflicts:
+    tests/qemuxml2argvdata/pages-discard.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ tests/qemuxml2argvdata/hugepages-pages.args  | 12 +++----
+ tests/qemuxml2argvdata/hugepages-pages.xml   |  3 +-
+ tests/qemuxml2argvdata/pages-discard.args    | 28 +++++++++++++++
+ tests/qemuxml2argvdata/pages-discard.xml     | 36 ++++++++++++++++++++
+ tests/qemuxml2argvtest.c                     |  6 ++--
+ tests/qemuxml2xmloutdata/hugepages-pages.xml |  3 +-
+ tests/qemuxml2xmloutdata/pages-discard.xml   |  1 +
+ tests/qemuxml2xmltest.c                      |  1 +
+ 8 files changed, 78 insertions(+), 12 deletions(-)
+ create mode 100644 tests/qemuxml2argvdata/pages-discard.args
+ create mode 100644 tests/qemuxml2argvdata/pages-discard.xml
+ create mode 120000 tests/qemuxml2xmloutdata/pages-discard.xml
+
+diff --git a/tests/qemuxml2argvdata/hugepages-pages.args b/tests/qemuxml2argvdata/hugepages-pages.args
+index b52cd581d5..7ece0272a0 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages.args
++++ b/tests/qemuxml2argvdata/hugepages-pages.args
+@@ -11,20 +11,20 @@ QEMU_AUDIO_DRV=none \
+ -m 4096 \
+ -smp 4,sockets=4,cores=1,threads=1 \
+ -object memory-backend-file,id=ram-node0,prealloc=yes,\
+-mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,discard-data=yes,\
+-size=1073741824,host-nodes=0-3,policy=bind \
++mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
++host-nodes=0-3,policy=bind \
+ -numa node,nodeid=0,cpus=0,memdev=ram-node0 \
+ -object memory-backend-file,id=ram-node1,prealloc=yes,\
+ mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
+ host-nodes=0-3,policy=bind \
+ -numa node,nodeid=1,cpus=1,memdev=ram-node1 \
+ -object memory-backend-file,id=ram-node2,prealloc=yes,\
+-mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,discard-data=yes,\
+-size=1073741824,host-nodes=0-3,policy=bind \
++mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
++host-nodes=0-3,policy=bind \
+ -numa node,nodeid=2,cpus=2,memdev=ram-node2 \
+ -object memory-backend-file,id=ram-node3,prealloc=yes,\
+-mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,discard-data=yes,\
+-size=1073741824,host-nodes=3,policy=bind \
++mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
++host-nodes=3,policy=bind \
+ -numa node,nodeid=3,cpus=3,memdev=ram-node3 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+diff --git a/tests/qemuxml2argvdata/hugepages-pages.xml b/tests/qemuxml2argvdata/hugepages-pages.xml
+index cba83e754c..f9270782d4 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages.xml
++++ b/tests/qemuxml2argvdata/hugepages-pages.xml
+@@ -8,7 +8,6 @@
+       <page size='2048' unit='KiB' nodeset='1'/>
+       <page size='1048576' unit='KiB' nodeset='0,2-3'/>
+     </hugepages>
+-    <discard/>
+   </memoryBacking>
+   <vcpu placement='static'>4</vcpu>
+   <numatune>
+@@ -22,7 +21,7 @@
+   <cpu>
+     <numa>
+       <cell id='0' cpus='0' memory='1048576' unit='KiB'/>
+-      <cell id='1' cpus='1' memory='1048576' unit='KiB' discard='no'/>
++      <cell id='1' cpus='1' memory='1048576' unit='KiB'/>
+       <cell id='2' cpus='2' memory='1048576' unit='KiB'/>
+       <cell id='3' cpus='3' memory='1048576' unit='KiB'/>
+     </numa>
+diff --git a/tests/qemuxml2argvdata/pages-discard.args b/tests/qemuxml2argvdata/pages-discard.args
+new file mode 100644
+index 0000000000..9db8c72a22
+--- /dev/null
++++ b/tests/qemuxml2argvdata/pages-discard.args
+@@ -0,0 +1,28 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name QEMUGuest1 \
++-S \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 4096 \
++-smp 4,sockets=4,cores=1,threads=1 \
++-numa node,nodeid=0,cpus=0,mem=1024 \
++-numa node,nodeid=1,cpus=1,mem=1024 \
++-numa node,nodeid=2,cpus=2,mem=1024 \
++-numa node,nodeid=3,cpus=3,mem=1024 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-display none \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
++server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot c \
++-usb
+diff --git a/tests/qemuxml2argvdata/pages-discard.xml b/tests/qemuxml2argvdata/pages-discard.xml
+new file mode 100644
+index 0000000000..a8c6b74d95
+--- /dev/null
++++ b/tests/qemuxml2argvdata/pages-discard.xml
+@@ -0,0 +1,36 @@
++<domain type='qemu'>
++  <name>QEMUGuest1</name>
++  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++  <memory unit='KiB'>4194304</memory>
++  <currentMemory unit='KiB'>4194304</currentMemory>
++  <memoryBacking>
++    <discard/>
++  </memoryBacking>
++  <vcpu placement='static'>4</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <cpu>
++    <numa>
++      <cell id='0' cpus='0' memory='1048576' unit='KiB'/>
++      <cell id='1' cpus='1' memory='1048576' unit='KiB' discard='no'/>
++      <cell id='2' cpus='2' memory='1048576' unit='KiB'/>
++      <cell id='3' cpus='3' memory='1048576' unit='KiB'/>
++    </numa>
++  </cpu>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 19fb7a0931..ea26d17a63 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -945,6 +945,9 @@ mymain(void)
+     DO_TEST("pmu-feature", NONE);
+     DO_TEST("pmu-feature-off", NONE);
+ 
++    DO_TEST("pages-discard",
++            QEMU_CAPS_OBJECT_MEMORY_FILE,
++            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-numa-default",
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+@@ -953,8 +956,7 @@ mymain(void)
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-pages",
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+-            QEMU_CAPS_OBJECT_MEMORY_FILE,
+-            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
++            QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-pages2", QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-pages3", QEMU_CAPS_OBJECT_MEMORY_RAM,
+diff --git a/tests/qemuxml2xmloutdata/hugepages-pages.xml b/tests/qemuxml2xmloutdata/hugepages-pages.xml
+index 292454588e..498610a217 100644
+--- a/tests/qemuxml2xmloutdata/hugepages-pages.xml
++++ b/tests/qemuxml2xmloutdata/hugepages-pages.xml
+@@ -8,7 +8,6 @@
+       <page size='2048' unit='KiB' nodeset='1'/>
+       <page size='1048576' unit='KiB' nodeset='0,2-3'/>
+     </hugepages>
+-    <discard/>
+   </memoryBacking>
+   <vcpu placement='static'>4</vcpu>
+   <numatune>
+@@ -22,7 +21,7 @@
+   <cpu>
+     <numa>
+       <cell id='0' cpus='0' memory='1048576' unit='KiB'/>
+-      <cell id='1' cpus='1' memory='1048576' unit='KiB' discard='no'/>
++      <cell id='1' cpus='1' memory='1048576' unit='KiB'/>
+       <cell id='2' cpus='2' memory='1048576' unit='KiB'/>
+       <cell id='3' cpus='3' memory='1048576' unit='KiB'/>
+     </numa>
+diff --git a/tests/qemuxml2xmloutdata/pages-discard.xml b/tests/qemuxml2xmloutdata/pages-discard.xml
+new file mode 120000
+index 0000000000..4d22fef81f
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/pages-discard.xml
+@@ -0,0 +1 @@
++../qemuxml2argvdata/pages-discard.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index 5900f4de61..b4bd9ebc4c 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -330,6 +330,7 @@ mymain(void)
+     DO_TEST("pmu-feature", NONE);
+     DO_TEST("pmu-feature-off", NONE);
+ 
++    DO_TEST("pages-discard", NONE);
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-pages", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-fix-TLS-handshake-failure-with-TLS-1.3.patch b/SOURCES/libvirt-tests-fix-TLS-handshake-failure-with-TLS-1.3.patch
new file mode 100644
index 0000000..d31c821
--- /dev/null
+++ b/SOURCES/libvirt-tests-fix-TLS-handshake-failure-with-TLS-1.3.patch
@@ -0,0 +1,42 @@
+From 1e693fc723a8309b243b74c5baa7b7f0682d52f7 Mon Sep 17 00:00:00 2001
+Message-Id: <1e693fc723a8309b243b74c5baa7b7f0682d52f7@dist-git>
+From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
+Date: Wed, 18 Jul 2018 19:21:06 +0100
+Subject: [PATCH] tests: fix TLS handshake failure with TLS 1.3
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When gnutls negotiates TLS 1.3 instead of 1.2, the order of messages
+sent by the handshake changes. This exposed a logic bug in the test
+suite which caused us to wait for the server to see handshake
+completion, but not wait for the client to see completion. The result
+was the client didn't receive the certificate for verification and the
+test failed.
+
+This is exposed in Fedora 29 rawhide which has just enabled TLS 1.3 in
+its GNUTLS builds.
+
+Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit cf92b90e3537631d5235a564f917a7a0fadac3e1)
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ tests/virnettlssessiontest.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/virnettlssessiontest.c b/tests/virnettlssessiontest.c
+index 7e85607181..375cc1bb02 100644
+--- a/tests/virnettlssessiontest.c
++++ b/tests/virnettlssessiontest.c
+@@ -180,7 +180,7 @@ static int testTLSSessionInit(const void *opaque)
+             if (rv == VIR_NET_TLS_HANDSHAKE_COMPLETE)
+                 clientShake = true;
+         }
+-    } while (!clientShake && !serverShake);
++    } while (!clientShake || !serverShake);
+ 
+ 
+     /* Finally make sure the server validation does what
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-introduce-hugepages-default-1G-nodeset-2M.patch b/SOURCES/libvirt-tests-introduce-hugepages-default-1G-nodeset-2M.patch
new file mode 100644
index 0000000..4e98d97
--- /dev/null
+++ b/SOURCES/libvirt-tests-introduce-hugepages-default-1G-nodeset-2M.patch
@@ -0,0 +1,144 @@
+From b1ad796106c4f1e889312c67164cce53b01cbc17 Mon Sep 17 00:00:00 2001
+Message-Id: <b1ad796106c4f1e889312c67164cce53b01cbc17@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:50 +0200
+Subject: [PATCH] tests: introduce hugepages-default-1G-nodeset-2M
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This test case is currently working but it uncovers existing issue
+in our code that the generated QEMU commandline uses the default 1G
+hugepage instead of the 2M hugepage specified for exact node.
+
+The issue in our code is that for non-numa guests we take into account
+only the first hugepage.  This will be fixed as invalid configuration
+since it doesn't make any sense to set default and specific hugepage
+for non-numa guest.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 6ff69e936e4185983fc331c45b76d3b3d8b717ae)
+
+Conflicts:
+    tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ .../hugepages-default-1G-nodeset-2M.args      | 26 ++++++++++++++++
+ .../hugepages-default-1G-nodeset-2M.xml       | 31 +++++++++++++++++++
+ tests/qemuxml2argvtest.c                      |  1 +
+ .../hugepages-default-1G-nodeset-2M.xml       |  1 +
+ tests/qemuxml2xmltest.c                       |  1 +
+ 5 files changed, 60 insertions(+)
+ create mode 100644 tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.args
+ create mode 100644 tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.xml
+ create mode 120000 tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml
+
+diff --git a/tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.args b/tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.args
+new file mode 100644
+index 0000000000..d1f8974032
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.args
+@@ -0,0 +1,26 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name SomeDummyHugepagesGuest \
++-S \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 1024 \
++-mem-prealloc \
++-mem-path /dev/hugepages1G/libvirt/qemu/-1-SomeDummyHugepagesGu \
++-smp 2,sockets=2,cores=1,threads=1 \
++-uuid ef1bdff4-27f3-4e85-a807-5fb4d58463cc \
++-display none \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,\
++path=/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot c \
++-usb
+diff --git a/tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.xml b/tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.xml
+new file mode 100644
+index 0000000000..eb0943b105
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.xml
+@@ -0,0 +1,31 @@
++<domain type='qemu'>
++  <name>SomeDummyHugepagesGuest</name>
++  <uuid>ef1bdff4-27f3-4e85-a807-5fb4d58463cc</uuid>
++  <memory unit='KiB'>1048576</memory>
++  <currentMemory unit='KiB'>1048576</currentMemory>
++  <memoryBacking>
++    <hugepages>
++      <page size='1048576' unit='KiB'/>
++      <page size='2048' unit='KiB' nodeset='0'/>
++    </hugepages>
++  </memoryBacking>
++  <vcpu placement='static'>2</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index d4251eff3e..f92c46cec5 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -959,6 +959,7 @@ mymain(void)
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
++    DO_TEST("hugepages-default-1G-nodeset-2M", NONE);
+     DO_TEST_FAILURE("hugepages-nodeset-nonexist",
+                     QEMU_CAPS_DEVICE_PC_DIMM,
+                     QEMU_CAPS_OBJECT_MEMORY_FILE,
+diff --git a/tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml b/tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml
+new file mode 120000
+index 0000000000..3d8eb7616e
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml
+@@ -0,0 +1 @@
++../qemuxml2argvdata/hugepages-default-1G-nodeset-2M.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index 6afc48f98e..6ba8f97e20 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -336,6 +336,7 @@ mymain(void)
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
++    DO_TEST("hugepages-default-1G-nodeset-2M", NONE);
+     DO_TEST("hugepages-numa-default-2M", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-numa-nodeset", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-introduce-hugepages-nodeset.patch b/SOURCES/libvirt-tests-introduce-hugepages-nodeset.patch
new file mode 100644
index 0000000..874f18b
--- /dev/null
+++ b/SOURCES/libvirt-tests-introduce-hugepages-nodeset.patch
@@ -0,0 +1,106 @@
+From becdbd9b2155dccde29cfa859c4948cf9f8cab8a Mon Sep 17 00:00:00 2001
+Message-Id: <becdbd9b2155dccde29cfa859c4948cf9f8cab8a@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:51 +0200
+Subject: [PATCH] tests: introduce hugepages-nodeset
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This use-case was broken by commit
+<fa6bdf6afa878b8d7c5ed71664ee72be8967cdc5>.
+
+We allowed this configuration and it was working as expected therefore
+we can consider it as regression.  We should have never allowed such
+configuration so now the best solution is in case of non-numa guest
+silently ignore the 'nodeset' attribute if it's set to '0'.
+
+That will be fixed by following patches.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 154b08a3a7b1f16fefefcc106982a062c065eacd)
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ tests/qemuxml2argvdata/hugepages-nodeset.xml  | 30 +++++++++++++++++++
+ tests/qemuxml2argvtest.c                      |  1 +
+ .../qemuxml2xmloutdata/hugepages-nodeset.xml  |  1 +
+ tests/qemuxml2xmltest.c                       |  1 +
+ 4 files changed, 33 insertions(+)
+ create mode 100644 tests/qemuxml2argvdata/hugepages-nodeset.xml
+ create mode 120000 tests/qemuxml2xmloutdata/hugepages-nodeset.xml
+
+diff --git a/tests/qemuxml2argvdata/hugepages-nodeset.xml b/tests/qemuxml2argvdata/hugepages-nodeset.xml
+new file mode 100644
+index 0000000000..4a85ddffad
+--- /dev/null
++++ b/tests/qemuxml2argvdata/hugepages-nodeset.xml
+@@ -0,0 +1,30 @@
++<domain type='qemu'>
++  <name>SomeDummyHugepagesGuest</name>
++  <uuid>ef1bdff4-27f3-4e85-a807-5fb4d58463cc</uuid>
++  <memory unit='KiB'>1048576</memory>
++  <currentMemory unit='KiB'>1048576</currentMemory>
++  <memoryBacking>
++    <hugepages>
++      <page size='2048' unit='KiB' nodeset='0'/>
++    </hugepages>
++  </memoryBacking>
++  <vcpu placement='static'>2</vcpu>
++  <os>
++    <type arch='i686' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-i686</emulator>
++    <controller type='usb' index='0'>
++      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
++    </controller>
++    <controller type='pci' index='0' model='pci-root'/>
++    <input type='mouse' bus='ps2'/>
++    <input type='keyboard' bus='ps2'/>
++    <memballoon model='none'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index f92c46cec5..bd5fdf9412 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -960,6 +960,7 @@ mymain(void)
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
+     DO_TEST("hugepages-default-1G-nodeset-2M", NONE);
++    DO_TEST_FAILURE("hugepages-nodeset", NONE);
+     DO_TEST_FAILURE("hugepages-nodeset-nonexist",
+                     QEMU_CAPS_DEVICE_PC_DIMM,
+                     QEMU_CAPS_OBJECT_MEMORY_FILE,
+diff --git a/tests/qemuxml2xmloutdata/hugepages-nodeset.xml b/tests/qemuxml2xmloutdata/hugepages-nodeset.xml
+new file mode 120000
+index 0000000000..b55838b780
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/hugepages-nodeset.xml
+@@ -0,0 +1 @@
++../qemuxml2argvdata/hugepages-nodeset.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index 6ba8f97e20..acbe2f7133 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -337,6 +337,7 @@ mymain(void)
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
+     DO_TEST("hugepages-default-1G-nodeset-2M", NONE);
++    DO_TEST("hugepages-nodeset", NONE);
+     DO_TEST("hugepages-numa-default-2M", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-numa-nodeset", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-qemu-Remove-disk-from-graphics-vnc-tls.patch b/SOURCES/libvirt-tests-qemu-Remove-disk-from-graphics-vnc-tls.patch
new file mode 100644
index 0000000..78ccd29
--- /dev/null
+++ b/SOURCES/libvirt-tests-qemu-Remove-disk-from-graphics-vnc-tls.patch
@@ -0,0 +1,72 @@
+From 6000c0194fe724e18bc0a61d69ae2899de8fe355 Mon Sep 17 00:00:00 2001
+Message-Id: <6000c0194fe724e18bc0a61d69ae2899de8fe355@dist-git>
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
+Date: Tue, 28 Aug 2018 12:46:43 +0200
+Subject: [PATCH] tests: qemu: Remove disk from graphics-vnc-tls
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The disk command line is tested elsewhere.
+
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit a37d832c9179fa7fef2e54f596258fd4712146ab)
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1598167
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ tests/qemuxml2argvdata/graphics-vnc-tls.args  | 2 --
+ tests/qemuxml2argvdata/graphics-vnc-tls.xml   | 6 ------
+ tests/qemuxml2xmloutdata/graphics-vnc-tls.xml | 6 ------
+ 3 files changed, 14 deletions(-)
+
+diff --git a/tests/qemuxml2argvdata/graphics-vnc-tls.args b/tests/qemuxml2argvdata/graphics-vnc-tls.args
+index b87c2116a3..3668fa889d 100644
+--- a/tests/qemuxml2argvdata/graphics-vnc-tls.args
++++ b/tests/qemuxml2argvdata/graphics-vnc-tls.args
+@@ -22,7 +22,5 @@ server,nowait \
+ -no-acpi \
+ -boot c \
+ -usb \
+--drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+--device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+ -vnc 127.0.0.1:3,tls,x509verify=/etc/pki/libvirt-vnc,sasl \
+ -vga cirrus
+diff --git a/tests/qemuxml2argvdata/graphics-vnc-tls.xml b/tests/qemuxml2argvdata/graphics-vnc-tls.xml
+index d0729e830d..079f6241c4 100644
+--- a/tests/qemuxml2argvdata/graphics-vnc-tls.xml
++++ b/tests/qemuxml2argvdata/graphics-vnc-tls.xml
+@@ -14,12 +14,6 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <driver name='qemu' type='raw'/>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'/>
+     <controller type='ide' index='0'/>
+     <controller type='pci' index='0' model='pci-root'/>
+diff --git a/tests/qemuxml2xmloutdata/graphics-vnc-tls.xml b/tests/qemuxml2xmloutdata/graphics-vnc-tls.xml
+index 7b53c2ae1f..dcbc4bcf1d 100644
+--- a/tests/qemuxml2xmloutdata/graphics-vnc-tls.xml
++++ b/tests/qemuxml2xmloutdata/graphics-vnc-tls.xml
+@@ -14,12 +14,6 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <driver name='qemu' type='raw'/>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+     </controller>
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-qemu-test-more-versions-for-graphics-vnc-tls.patch b/SOURCES/libvirt-tests-qemu-test-more-versions-for-graphics-vnc-tls.patch
new file mode 100644
index 0000000..d8f98f7
--- /dev/null
+++ b/SOURCES/libvirt-tests-qemu-test-more-versions-for-graphics-vnc-tls.patch
@@ -0,0 +1,116 @@
+From 0f5bad99762f92f7b7a0e65e68fbb83bad787a4a Mon Sep 17 00:00:00 2001
+Message-Id: <0f5bad99762f92f7b7a0e65e68fbb83bad787a4a@dist-git>
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
+Date: Tue, 28 Aug 2018 12:46:44 +0200
+Subject: [PATCH] tests: qemu: test more versions for graphics-vnc-tls
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Add a test with QEMU 2.4.0 capabilites, as well as the latest caps.
+
+The code paths for formatting TLS options will be altered and
+2.4.0 is the newest version where QEMU_CAPS_OBJECT_TLS_CREDS_X509
+is not supported.
+
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 11b5396ceabe2ca91d8110f172f3ccf0d3901111)
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1598167
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ .../graphics-vnc-tls.x86_64-2.4.0.args        | 28 +++++++++++++++++
+ .../graphics-vnc-tls.x86_64-latest.args       | 31 +++++++++++++++++++
+ tests/qemuxml2argvtest.c                      |  2 ++
+ 3 files changed, 61 insertions(+)
+ create mode 100644 tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-2.4.0.args
+ create mode 100644 tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-latest.args
+
+diff --git a/tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-2.4.0.args b/tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-2.4.0.args
+new file mode 100644
+index 0000000000..7b8e3a4aa6
+--- /dev/null
++++ b/tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-2.4.0.args
+@@ -0,0 +1,28 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++SASL_CONF_PATH=/root/.sasl2 \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name guest=QEMUGuest1,debug-threads=on \
++-S \
++-machine pc-i440fx-2.4,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-realtime mlock=off \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
++server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot strict=on \
++-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-vnc 127.0.0.1:3,tls,x509verify=/etc/pki/libvirt-vnc,sasl \
++-device cirrus-vga,id=video0,bus=pci.0,addr=0x2 \
++-msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-latest.args b/tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-latest.args
+new file mode 100644
+index 0000000000..01743eff2a
+--- /dev/null
++++ b/tests/qemuxml2argvdata/graphics-vnc-tls.x86_64-latest.args
+@@ -0,0 +1,31 @@
++LC_ALL=C \
++PATH=/bin \
++HOME=/home/test \
++USER=test \
++LOGNAME=test \
++SASL_CONF_PATH=/root/.sasl2 \
++QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-i686 \
++-name guest=QEMUGuest1,debug-threads=on \
++-S \
++-object secret,id=masterKey0,format=raw,\
++file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
++-machine pc,accel=tcg,usb=off,dump-guest-core=off \
++-m 214 \
++-realtime mlock=off \
++-smp 1,sockets=1,cores=1,threads=1 \
++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
++-no-user-config \
++-nodefaults \
++-chardev socket,id=charmonitor,fd=1729,server,nowait \
++-mon chardev=charmonitor,id=monitor,mode=control \
++-rtc base=utc \
++-no-shutdown \
++-no-acpi \
++-boot strict=on \
++-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-vnc 127.0.0.1:3,tls,x509verify=/etc/pki/libvirt-vnc,sasl \
++-device cirrus-vga,id=video0,bus=pci.0,addr=0x2 \
++-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
++resourcecontrol=deny \
++-msg timestamp=on
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 02bb9889ee..608a2b6ce3 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -1207,6 +1207,8 @@ mymain(void)
+     driver.config->vncTLS = 1;
+     driver.config->vncTLSx509verify = 1;
+     DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
++    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
++    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
+     driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
+     VIR_FREE(driver.config->vncSASLdir);
+     VIR_FREE(driver.config->vncTLSx509certdir);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-qemucaps-Add-test-data-for-upcoming-qemu-3.0.0.patch b/SOURCES/libvirt-tests-qemucaps-Add-test-data-for-upcoming-qemu-3.0.0.patch
new file mode 100644
index 0000000..ab2c9ed
--- /dev/null
+++ b/SOURCES/libvirt-tests-qemucaps-Add-test-data-for-upcoming-qemu-3.0.0.patch
@@ -0,0 +1,23984 @@
+From 1c37b8a68fd26d854eb4b657a4706fbb5b9095d4 Mon Sep 17 00:00:00 2001
+Message-Id: <1c37b8a68fd26d854eb4b657a4706fbb5b9095d4@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Thu, 19 Jul 2018 15:03:47 +0200
+Subject: [PATCH] tests: qemucaps: Add test data for upcoming qemu 3.0.0
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Based on qemu commit ab3257c281c1a1a91da1090ac9e38ddd8f860c63
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 8b4a31efc0ae4a31ebd3df995dac4a262883186b)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1475770
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ .../caps_3.0.0.x86_64.replies                 | 22718 ++++++++++++++++
+ .../caps_3.0.0.x86_64.xml                     |  1213 +
+ tests/qemucapabilitiestest.c                  |     1 +
+ 3 files changed, 23932 insertions(+)
+ create mode 100644 tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies
+ create mode 100644 tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies
+new file mode 100644
+index 0000000000..257f0ecbe2
+--- /dev/null
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies
+@@ -0,0 +1,22718 @@
++{
++  "execute": "qmp_capabilities",
++  "id": "libvirt-1"
++}
++
++{
++  "return": {
++  },
++  "id": "libvirt-1"
++}
++
++{
++  "execute": "query-version",
++  "id": "libvirt-2"
++}
++
++{
++  "return": {
++    "qemu": {
++      "micro": 50,
++      "minor": 12,
++      "major": 2
++    },
++    "package": "v2.12.0-2284-gab3257c281"
++  },
++  "id": "libvirt-2"
++}
++
++{
++  "execute": "query-target",
++  "id": "libvirt-3"
++}
++
++{
++  "return": {
++    "arch": "x86_64"
++  },
++  "id": "libvirt-3"
++}
++
++{
++  "execute": "query-commands",
++  "id": "libvirt-4"
++}
++
++{
++  "return": [
++    {
++      "name": "netdev_add"
++    },
++    {
++      "name": "device_add"
++    },
++    {
++      "name": "query-qmp-schema"
++    },
++    {
++      "name": "set-numa-node"
++    },
++    {
++      "name": "query-sev-capabilities"
++    },
++    {
++      "name": "query-sev-launch-measure"
++    },
++    {
++      "name": "query-sev"
++    },
++    {
++      "name": "query-vm-generation-id"
++    },
++    {
++      "name": "query-hotpluggable-cpus"
++    },
++    {
++      "name": "xen-load-devices-state"
++    },
++    {
++      "name": "rtc-reset-reinjection"
++    },
++    {
++      "name": "query-acpi-ospm-status"
++    },
++    {
++      "name": "query-memory-devices"
++    },
++    {
++      "name": "query-memdev"
++    },
++    {
++      "name": "query-command-line-options"
++    },
++    {
++      "name": "query-target"
++    },
++    {
++      "name": "query-fdsets"
++    },
++    {
++      "name": "remove-fd"
++    },
++    {
++      "name": "add-fd"
++    },
++    {
++      "name": "query-cpu-model-expansion"
++    },
++    {
++      "name": "query-cpu-definitions"
++    },
++    {
++      "name": "query-memory-size-summary"
++    },
++    {
++      "name": "query-machines"
++    },
++    {
++      "name": "closefd"
++    },
++    {
++      "name": "getfd"
++    },
++    {
++      "name": "object-del"
++    },
++    {
++      "name": "object-add"
++    },
++    {
++      "name": "query-dump-guest-memory-capability"
++    },
++    {
++      "name": "query-dump"
++    },
++    {
++      "name": "dump-guest-memory"
++    },
++    {
++      "name": "device_del"
++    },
++    {
++      "name": "xen-set-global-dirty-log"
++    },
++    {
++      "name": "qom-list-properties"
++    },
++    {
++      "name": "device-list-properties"
++    },
++    {
++      "name": "qom-list-types"
++    },
++    {
++      "name": "change"
++    },
++    {
++      "name": "qom-set"
++    },
++    {
++      "name": "qom-get"
++    },
++    {
++      "name": "qom-list"
++    },
++    {
++      "name": "human-monitor-command"
++    },
++    {
++      "name": "balloon"
++    },
++    {
++      "name": "inject-nmi"
++    },
++    {
++      "name": "system_wakeup"
++    },
++    {
++      "name": "exit-preconfig"
++    },
++    {
++      "name": "cont"
++    },
++    {
++      "name": "pmemsave"
++    },
++    {
++      "name": "memsave"
++    },
++    {
++      "name": "cpu-add"
++    },
++    {
++      "name": "system_powerdown"
++    },
++    {
++      "name": "system_reset"
++    },
++    {
++      "name": "stop"
++    },
++    {
++      "name": "quit"
++    },
++    {
++      "name": "query-pci"
++    },
++    {
++      "name": "query-balloon"
++    },
++    {
++      "name": "query-iothreads"
++    },
++    {
++      "name": "query-cpus-fast"
++    },
++    {
++      "name": "query-cpus"
++    },
++    {
++      "name": "query-events"
++    },
++    {
++      "name": "query-uuid"
++    },
++    {
++      "name": "query-kvm"
++    },
++    {
++      "name": "query-name"
++    },
++    {
++      "name": "add_client"
++    },
++    {
++      "name": "query-commands"
++    },
++    {
++      "name": "query-version"
++    },
++    {
++      "name": "qmp_capabilities"
++    },
++    {
++      "name": "trace-event-set-state"
++    },
++    {
++      "name": "trace-event-get-state"
++    },
++    {
++      "name": "transaction"
++    },
++    {
++      "name": "migrate-pause"
++    },
++    {
++      "name": "migrate-recover"
++    },
++    {
++      "name": "xen-colo-do-checkpoint"
++    },
++    {
++      "name": "query-xen-replication-status"
++    },
++    {
++      "name": "xen-set-replication"
++    },
++    {
++      "name": "xen-save-devices-state"
++    },
++    {
++      "name": "migrate-incoming"
++    },
++    {
++      "name": "migrate"
++    },
++    {
++      "name": "query-migrate-cache-size"
++    },
++    {
++      "name": "migrate-set-cache-size"
++    },
++    {
++      "name": "migrate_set_speed"
++    },
++    {
++      "name": "migrate_set_downtime"
++    },
++    {
++      "name": "migrate-continue"
++    },
++    {
++      "name": "migrate_cancel"
++    },
++    {
++      "name": "x-colo-lost-heartbeat"
++    },
++    {
++      "name": "migrate-start-postcopy"
++    },
++    {
++      "name": "client_migrate_info"
++    },
++    {
++      "name": "query-migrate-parameters"
++    },
++    {
++      "name": "migrate-set-parameters"
++    },
++    {
++      "name": "query-migrate-capabilities"
++    },
++    {
++      "name": "migrate-set-capabilities"
++    },
++    {
++      "name": "query-migrate"
++    },
++    {
++      "name": "input-send-event"
++    },
++    {
++      "name": "send-key"
++    },
++    {
++      "name": "query-mice"
++    },
++    {
++      "name": "change-vnc-password"
++    },
++    {
++      "name": "query-vnc-servers"
++    },
++    {
++      "name": "query-vnc"
++    },
++    {
++      "name": "query-spice"
++    },
++    {
++      "name": "screendump"
++    },
++    {
++      "name": "expire_password"
++    },
++    {
++      "name": "set_password"
++    },
++    {
++      "name": "query-tpm"
++    },
++    {
++      "name": "query-tpm-types"
++    },
++    {
++      "name": "query-tpm-models"
++    },
++    {
++      "name": "query-rocker-of-dpa-groups"
++    },
++    {
++      "name": "query-rocker-of-dpa-flows"
++    },
++    {
++      "name": "query-rocker-ports"
++    },
++    {
++      "name": "query-rocker"
++    },
++    {
++      "name": "query-rx-filter"
++    },
++    {
++      "name": "netdev_del"
++    },
++    {
++      "name": "set_link"
++    },
++    {
++      "name": "chardev-send-break"
++    },
++    {
++      "name": "chardev-remove"
++    },
++    {
++      "name": "chardev-change"
++    },
++    {
++      "name": "chardev-add"
++    },
++    {
++      "name": "ringbuf-read"
++    },
++    {
++      "name": "ringbuf-write"
++    },
++    {
++      "name": "query-chardev-backends"
++    },
++    {
++      "name": "query-chardev"
++    },
++    {
++      "name": "nbd-server-stop"
++    },
++    {
++      "name": "x-nbd-server-add-bitmap"
++    },
++    {
++      "name": "nbd-server-remove"
++    },
++    {
++      "name": "nbd-server-add"
++    },
++    {
++      "name": "nbd-server-start"
++    },
++    {
++      "name": "eject"
++    },
++    {
++      "name": "blockdev-snapshot-delete-internal-sync"
++    },
++    {
++      "name": "blockdev-snapshot-internal-sync"
++    },
++    {
++      "name": "query-pr-managers"
++    },
++    {
++      "name": "x-blockdev-set-iothread"
++    },
++    {
++      "name": "x-blockdev-change"
++    },
++    {
++      "name": "block-set-write-threshold"
++    },
++    {
++      "name": "blockdev-change-medium"
++    },
++    {
++      "name": "blockdev-insert-medium"
++    },
++    {
++      "name": "blockdev-remove-medium"
++    },
++    {
++      "name": "blockdev-close-tray"
++    },
++    {
++      "name": "blockdev-open-tray"
++    },
++    {
++      "name": "blockdev-create"
++    },
++    {
++      "name": "blockdev-del"
++    },
++    {
++      "name": "blockdev-add"
++    },
++    {
++      "name": "block-job-finalize"
++    },
++    {
++      "name": "block-job-dismiss"
++    },
++    {
++      "name": "block-job-complete"
++    },
++    {
++      "name": "block-job-resume"
++    },
++    {
++      "name": "block-job-pause"
++    },
++    {
++      "name": "block-job-cancel"
++    },
++    {
++      "name": "block-job-set-speed"
++    },
++    {
++      "name": "block-stream"
++    },
++    {
++      "name": "block_set_io_throttle"
++    },
++    {
++      "name": "blockdev-mirror"
++    },
++    {
++      "name": "x-debug-block-dirty-bitmap-sha256"
++    },
++    {
++      "name": "x-block-dirty-bitmap-merge"
++    },
++    {
++      "name": "x-block-dirty-bitmap-disable"
++    },
++    {
++      "name": "x-block-dirty-bitmap-enable"
++    },
++    {
++      "name": "block-dirty-bitmap-clear"
++    },
++    {
++      "name": "block-dirty-bitmap-remove"
++    },
++    {
++      "name": "block-dirty-bitmap-add"
++    },
++    {
++      "name": "drive-mirror"
++    },
++    {
++      "name": "query-named-block-nodes"
++    },
++    {
++      "name": "blockdev-backup"
++    },
++    {
++      "name": "drive-backup"
++    },
++    {
++      "name": "block-commit"
++    },
++    {
++      "name": "change-backing-file"
++    },
++    {
++      "name": "blockdev-snapshot"
++    },
++    {
++      "name": "blockdev-snapshot-sync"
++    },
++    {
++      "name": "block_resize"
++    },
++    {
++      "name": "block_passwd"
++    },
++    {
++      "name": "query-block-jobs"
++    },
++    {
++      "name": "query-blockstats"
++    },
++    {
++      "name": "query-block"
++    },
++    {
++      "name": "x-block-latency-histogram-set"
++    },
++    {
++      "name": "query-jobs"
++    },
++    {
++      "name": "job-finalize"
++    },
++    {
++      "name": "job-dismiss"
++    },
++    {
++      "name": "job-complete"
++    },
++    {
++      "name": "job-cancel"
++    },
++    {
++      "name": "job-resume"
++    },
++    {
++      "name": "job-pause"
++    },
++    {
++      "name": "watchdog-set-action"
++    },
++    {
++      "name": "query-status"
++    }
++  ],
++  "id": "libvirt-4"
++}
++
++{
++  "execute": "add-fd",
++  "arguments": {
++    "fdset-id": 0,
++    "opaque": "/dev/null"
++  },
++  "id": "libvirt-5"
++}
++
++{
++  "return": {
++    "fd": 17,
++    "fdset-id": 0
++  },
++  "id": "libvirt-5"
++}
++
++{
++  "execute": "block-commit",
++  "arguments": {
++    "device": "bogus"
++  },
++  "id": "libvirt-6"
++}
++
++{
++  "id": "libvirt-6",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'bogus' not found"
++  }
++}
++
++{
++  "execute": "query-kvm",
++  "id": "libvirt-7"
++}
++
++{
++  "return": {
++    "enabled": true,
++    "present": true
++  },
++  "id": "libvirt-7"
++}
++
++{
++  "execute": "query-events",
++  "id": "libvirt-8"
++}
++
++{
++  "return": [
++    {
++      "name": "COMMAND_DROPPED"
++    },
++    {
++      "name": "RTC_CHANGE"
++    },
++    {
++      "name": "ACPI_DEVICE_OST"
++    },
++    {
++      "name": "MEM_UNPLUG_ERROR"
++    },
++    {
++      "name": "DUMP_COMPLETED"
++    },
++    {
++      "name": "DEVICE_DELETED"
++    },
++    {
++      "name": "BALLOON_CHANGE"
++    },
++    {
++      "name": "MIGRATION_PASS"
++    },
++    {
++      "name": "MIGRATION"
++    },
++    {
++      "name": "VNC_DISCONNECTED"
++    },
++    {
++      "name": "VNC_INITIALIZED"
++    },
++    {
++      "name": "VNC_CONNECTED"
++    },
++    {
++      "name": "SPICE_MIGRATE_COMPLETED"
++    },
++    {
++      "name": "SPICE_DISCONNECTED"
++    },
++    {
++      "name": "SPICE_INITIALIZED"
++    },
++    {
++      "name": "SPICE_CONNECTED"
++    },
++    {
++      "name": "NIC_RX_FILTER_CHANGED"
++    },
++    {
++      "name": "VSERPORT_CHANGE"
++    },
++    {
++      "name": "QUORUM_REPORT_BAD"
++    },
++    {
++      "name": "QUORUM_FAILURE"
++    },
++    {
++      "name": "PR_MANAGER_STATUS_CHANGED"
++    },
++    {
++      "name": "DEVICE_TRAY_MOVED"
++    },
++    {
++      "name": "BLOCK_WRITE_THRESHOLD"
++    },
++    {
++      "name": "BLOCK_JOB_PENDING"
++    },
++    {
++      "name": "BLOCK_JOB_READY"
++    },
++    {
++      "name": "BLOCK_JOB_ERROR"
++    },
++    {
++      "name": "BLOCK_JOB_CANCELLED"
++    },
++    {
++      "name": "BLOCK_JOB_COMPLETED"
++    },
++    {
++      "name": "BLOCK_IO_ERROR"
++    },
++    {
++      "name": "BLOCK_IMAGE_CORRUPTED"
++    },
++    {
++      "name": "JOB_STATUS_CHANGE"
++    },
++    {
++      "name": "GUEST_PANICKED"
++    },
++    {
++      "name": "WATCHDOG"
++    },
++    {
++      "name": "WAKEUP"
++    },
++    {
++      "name": "SUSPEND_DISK"
++    },
++    {
++      "name": "SUSPEND"
++    },
++    {
++      "name": "RESUME"
++    },
++    {
++      "name": "STOP"
++    },
++    {
++      "name": "RESET"
++    },
++    {
++      "name": "POWERDOWN"
++    },
++    {
++      "name": "SHUTDOWN"
++    }
++  ],
++  "id": "libvirt-8"
++}
++
++{
++  "execute": "qom-list-types",
++  "id": "libvirt-9"
++}
++
++{
++  "return": [
++    {
++      "name": "vhost-vsock-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "scsi-generic",
++      "parent": "scsi-device"
++    },
++    {
++      "name": "qio-channel-tls",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "scsi-hd",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "pc-0.10-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "usb-bot",
++      "parent": "usb-storage-dev"
++    },
++    {
++      "name": "chardev-null",
++      "parent": "chardev"
++    },
++    {
++      "name": "chardev-parallel",
++      "parent": "chardev"
++    },
++    {
++      "name": "qemu-xhci",
++      "parent": "base-xhci"
++    },
++    {
++      "name": "lsi53c895a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "kvm-ioapic",
++      "parent": "ioapic-common"
++    },
++    {
++      "name": "virtio-keyboard-pci",
++      "parent": "virtio-input-hid-pci"
++    },
++    {
++      "name": "xen-sysbus",
++      "parent": "bus"
++    },
++    {
++      "name": "i440FX",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ide-hd",
++      "parent": "ide-device"
++    },
++    {
++      "name": "Opteron_G1-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "kvm64-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "virtio-net-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "kvm-i8259",
++      "parent": "pic-common"
++    },
++    {
++      "name": "at24c-eeprom",
++      "parent": "i2c-slave"
++    },
++    {
++      "name": "chardev-pty",
++      "parent": "chardev"
++    },
++    {
++      "name": "xen-apic",
++      "parent": "apic-common"
++    },
++    {
++      "name": "SUNW,fdtwo",
++      "parent": "base-sysbus-fdc"
++    },
++    {
++      "name": "isa-pcspk",
++      "parent": "isa-device"
++    },
++    {
++      "name": "Haswell-IBRS-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "loader",
++      "parent": "device"
++    },
++    {
++      "name": "filter-rewriter",
++      "parent": "netfilter"
++    },
++    {
++      "name": "virtio-serial-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "Nehalem-IBRS-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pc-0.12-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "pcie-root-port",
++      "parent": "pcie-root-port-base"
++    },
++    {
++      "name": "virtio-crypto-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "usb-host",
++      "parent": "usb-device"
++    },
++    {
++      "name": "pc-0.11-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "usb-bt-dongle",
++      "parent": "usb-device"
++    },
++    {
++      "name": "igd-passthrough-isa-bridge",
++      "parent": "pci-device"
++    },
++    {
++      "name": "qemu64-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "virtio-input-host-pci",
++      "parent": "virtio-input-pci"
++    },
++    {
++      "name": "pc-i440fx-2.10-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "phenom-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "e1000",
++      "parent": "e1000-base"
++    },
++    {
++      "name": "PIIX3-xen",
++      "parent": "pci-piix3"
++    },
++    {
++      "name": "pc-i440fx-1.4-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "ICH9-LPC",
++      "parent": "pci-device"
++    },
++    {
++      "name": "sysbus-ahci",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "ich9-usb-uhci4",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "ich9-usb-uhci6",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "pc-q35-2.6-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "usb-mtp",
++      "parent": "usb-device"
++    },
++    {
++      "name": "ich9-usb-uhci5",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "chardev-spicevmc",
++      "parent": "chardev-spice"
++    },
++    {
++      "name": "ich9-usb-uhci3",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "ich9-usb-uhci2",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "ich9-usb-uhci1",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "tls-creds-psk",
++      "parent": "tls-creds"
++    },
++    {
++      "name": "tpci200",
++      "parent": "pci-device"
++    },
++    {
++      "name": "memory-backend-file",
++      "parent": "memory-backend"
++    },
++    {
++      "name": "pc-q35-2.5-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "AMDVI-PCI",
++      "parent": "pci-device"
++    },
++    {
++      "name": "rtl8139",
++      "parent": "pci-device"
++    },
++    {
++      "name": "chardev-hci",
++      "parent": "chardev"
++    },
++    {
++      "name": "pc-q35-2.4-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "megasas",
++      "parent": "megasas-base"
++    },
++    {
++      "name": "base-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "container",
++      "parent": "object"
++    },
++    {
++      "name": "qxl-vga",
++      "parent": "pci-qxl"
++    },
++    {
++      "name": "scsi-block",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "Opteron_G2-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "unimplemented-device",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "pc-i440fx-3.0-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "scsi-cd",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "pxb-bus",
++      "parent": "PCI"
++    },
++    {
++      "name": "pc-0.14-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "accel",
++      "parent": "object"
++    },
++    {
++      "name": "pc-i440fx-2.12-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "floppy-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "usb-audio",
++      "parent": "usb-device"
++    },
++    {
++      "name": "virtio-vga",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "vmware-svga",
++      "parent": "pci-device"
++    },
++    {
++      "name": "isa-serial",
++      "parent": "isa-device"
++    },
++    {
++      "name": "pc-0.13-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "vhost-scsi-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "virtio-serial-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "isa-debug-exit",
++      "parent": "isa-device"
++    },
++    {
++      "name": "chardev-gdb",
++      "parent": "chardev"
++    },
++    {
++      "name": "fdc37m81x-superio",
++      "parent": "isa-superio"
++    },
++    {
++      "name": "pc-testdev",
++      "parent": "isa-device"
++    },
++    {
++      "name": "xen-backend",
++      "parent": "xen-sysdev"
++    },
++    {
++      "name": "Haswell-noTSX-IBRS-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pr-manager-helper",
++      "parent": "pr-manager"
++    },
++    {
++      "name": "fw_cfg_mem",
++      "parent": "fw_cfg"
++    },
++    {
++      "name": "tls-creds-anon",
++      "parent": "tls-creds"
++    },
++    {
++      "name": "pc-q35-2.8-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "ide-cd",
++      "parent": "ide-device"
++    },
++    {
++      "name": "usb-uas",
++      "parent": "usb-device"
++    },
++    {
++      "name": "pc-i440fx-2.11-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "pc-i440fx-1.6-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "chardev-socket",
++      "parent": "chardev"
++    },
++    {
++      "name": "virtio-balloon-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "iothread",
++      "parent": "object"
++    },
++    {
++      "name": "filter-redirector",
++      "parent": "netfilter"
++    },
++    {
++      "name": "sb16",
++      "parent": "isa-device"
++    },
++    {
++      "name": "486-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pc-q35-2.7-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "pc-i440fx-1.5-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "chardev-mux",
++      "parent": "chardev"
++    },
++    {
++      "name": "bochs-display",
++      "parent": "pci-device"
++    },
++    {
++      "name": "usb-ccid",
++      "parent": "usb-device"
++    },
++    {
++      "name": "isa-cirrus-vga",
++      "parent": "isa-device"
++    },
++    {
++      "name": "vhost-vsock-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "sdhci-pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtio-input-host-device",
++      "parent": "virtio-input-device"
++    },
++    {
++      "name": "i82559er",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pci-bridge",
++      "parent": "base-pci-bridge"
++    },
++    {
++      "name": "cs4231a",
++      "parent": "isa-device"
++    },
++    {
++      "name": "ivshmem-doorbell",
++      "parent": "ivshmem-common"
++    },
++    {
++      "name": "chardev-udp",
++      "parent": "chardev"
++    },
++    {
++      "name": "virtio-rng-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "isa-parallel",
++      "parent": "isa-device"
++    },
++    {
++      "name": "piix4-ide",
++      "parent": "pci-ide"
++    },
++    {
++      "name": "adlib",
++      "parent": "isa-device"
++    },
++    {
++      "name": "pc-0.15-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "kvmvapic",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "hda-micro",
++      "parent": "hda-audio"
++    },
++    {
++      "name": "pci-bridge-seat",
++      "parent": "pci-bridge"
++    },
++    {
++      "name": "dc390",
++      "parent": "am53c974"
++    },
++    {
++      "name": "qemu,register",
++      "parent": "device"
++    },
++    {
++      "name": "IDE",
++      "parent": "bus"
++    },
++    {
++      "name": "fw_cfg_io",
++      "parent": "fw_cfg"
++    },
++    {
++      "name": "tpm-crb",
++      "parent": "device"
++    },
++    {
++      "name": "memory-backend-ram",
++      "parent": "memory-backend"
++    },
++    {
++      "name": "am53c974",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtio-blk-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "nvdimm",
++      "parent": "pc-dimm"
++    },
++    {
++      "name": "mc146818rtc",
++      "parent": "isa-device"
++    },
++    {
++      "name": "qio-channel-websock",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "qio-channel-file",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "chardev-msmouse",
++      "parent": "chardev"
++    },
++    {
++      "name": "chardev-pipe",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "pc-q35-2.9-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "pc-i440fx-1.7-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "cryptodev-backend-builtin",
++      "parent": "cryptodev-backend"
++    },
++    {
++      "name": "hda-output",
++      "parent": "hda-audio"
++    },
++    {
++      "name": "mmio_interface",
++      "parent": "device"
++    },
++    {
++      "name": "chardev-spiceport",
++      "parent": "chardev-spice"
++    },
++    {
++      "name": "VGA",
++      "parent": "pci-vga"
++    },
++    {
++      "name": "KnightsMill-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "sga",
++      "parent": "isa-device"
++    },
++    {
++      "name": "i8257",
++      "parent": "isa-device"
++    },
++    {
++      "name": "qio-net-listener",
++      "parent": "object"
++    },
++    {
++      "name": "port92",
++      "parent": "isa-device"
++    },
++    {
++      "name": "mptsas1068",
++      "parent": "pci-device"
++    },
++    {
++      "name": "edu",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtio-mouse-pci",
++      "parent": "virtio-input-hid-pci"
++    },
++    {
++      "name": "Skylake-Client-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "ICH9 SMB",
++      "parent": "pci-device"
++    },
++    {
++      "name": "Broadwell-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "vfio-pci-igd-lpc-bridge",
++      "parent": "pci-device"
++    },
++    {
++      "name": "HDA",
++      "parent": "bus"
++    },
++    {
++      "name": "n270-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pcm3680_pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "usb-redir",
++      "parent": "usb-device"
++    },
++    {
++      "name": "floppy",
++      "parent": "device"
++    },
++    {
++      "name": "qemu:memory-region",
++      "parent": "object"
++    },
++    {
++      "name": "mioe3680_pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "sysbus-ohci",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "chardev-ringbuf",
++      "parent": "chardev"
++    },
++    {
++      "name": "max-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "can-bus",
++      "parent": "object"
++    },
++    {
++      "name": "qtest-accel",
++      "parent": "accel"
++    },
++    {
++      "name": "qio-channel-command",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "pxb-host",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "IvyBridge-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "xio3130-downstream",
++      "parent": "pcie-slot"
++    },
++    {
++      "name": "virtio-gpu-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "virtio-blk-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "cirrus-vga",
++      "parent": "pci-device"
++    },
++    {
++      "name": "isa-ipmi-kcs",
++      "parent": "isa-device"
++    },
++    {
++      "name": "kvmclock",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "cryptodev-vhost-user",
++      "parent": "cryptodev-backend"
++    },
++    {
++      "name": "Opteron_G3-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "lsi53c810",
++      "parent": "lsi53c895a"
++    },
++    {
++      "name": "System",
++      "parent": "bus"
++    },
++    {
++      "name": "Westmere-IBRS-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "usb-serial",
++      "parent": "usb-serial-dev"
++    },
++    {
++      "name": "vt82c686b-usb-uhci",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "chardev-file",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "pc-q35-2.10-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "intel-iommu",
++      "parent": "x86-iommu"
++    },
++    {
++      "name": "PCIE",
++      "parent": "PCI"
++    },
++    {
++      "name": "tpm-tis",
++      "parent": "isa-device"
++    },
++    {
++      "name": "xen-sysdev",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "pcie-pci-bridge",
++      "parent": "base-pci-bridge"
++    },
++    {
++      "name": "qio-dns-resolver",
++      "parent": "object"
++    },
++    {
++      "name": "vhost-user-blk-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "virtio-serial-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "kvm-pit",
++      "parent": "pit-common"
++    },
++    {
++      "name": "secondary-vga",
++      "parent": "pci-vga"
++    },
++    {
++      "name": "vhost-scsi",
++      "parent": "vhost-scsi-common"
++    },
++    {
++      "name": "pci-ohci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "cfi.pflash01",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "usb-hub",
++      "parent": "usb-device"
++    },
++    {
++      "name": "ccid-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "xenpv-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "EPYC-IBPB-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "input-linux",
++      "parent": "object"
++    },
++    {
++      "name": "piix3-ide-xen",
++      "parent": "pci-ide"
++    },
++    {
++      "name": "vmgenid",
++      "parent": "device"
++    },
++    {
++      "name": "pc-q35-3.0-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "pci-serial",
++      "parent": "pci-device"
++    },
++    {
++      "name": "vmport",
++      "parent": "isa-device"
++    },
++    {
++      "name": "vhost-user-scsi-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "ipmi-bmc-extern",
++      "parent": "ipmi-bmc"
++    },
++    {
++      "name": "PIIX4_PM",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i8042",
++      "parent": "isa-device"
++    },
++    {
++      "name": "coreduo-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "i82559c",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82559b",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82559a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pc-q35-2.12-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "SCSI",
++      "parent": "bus"
++    },
++    {
++      "name": "rocker",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pcnet",
++      "parent": "pci-device"
++    },
++    {
++      "name": "rng-egd",
++      "parent": "rng-backend"
++    },
++    {
++      "name": "Skylake-Server-IBRS-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "Opteron_G4-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pc-q35-2.11-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "chardev-testdev",
++      "parent": "chardev"
++    },
++    {
++      "name": "PIIX3",
++      "parent": "pci-piix3"
++    },
++    {
++      "name": "filter-dump",
++      "parent": "netfilter"
++    },
++    {
++      "name": "migration",
++      "parent": "device"
++    },
++    {
++      "name": "vmmouse",
++      "parent": "isa-device"
++    },
++    {
++      "name": "i82558b",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82558a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ioapic",
++      "parent": "ioapic-common"
++    },
++    {
++      "name": "smbus-eeprom",
++      "parent": "smbus-device"
++    },
++    {
++      "name": "Haswell-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "i82801",
++      "parent": "pci-device"
++    },
++    {
++      "name": "tls-creds-x509",
++      "parent": "tls-creds"
++    },
++    {
++      "name": "virtio-net-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "virtio-keyboard-device",
++      "parent": "virtio-input-hid-device"
++    },
++    {
++      "name": "i82562",
++      "parent": "pci-device"
++    },
++    {
++      "name": "Haswell-noTSX-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "usb-net",
++      "parent": "usb-device"
++    },
++    {
++      "name": "tpm-passthrough",
++      "parent": "tpm-backend"
++    },
++    {
++      "name": "q35-pcihost",
++      "parent": "pcie-host-bridge"
++    },
++    {
++      "name": "amd-iommu",
++      "parent": "x86-iommu"
++    },
++    {
++      "name": "i440FX-pcihost",
++      "parent": "pci-host-bridge"
++    },
++    {
++      "name": "i82557c",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82557b",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i82557a",
++      "parent": "pci-device"
++    },
++    {
++      "name": "chardev-memory",
++      "parent": "chardev-ringbuf"
++    },
++    {
++      "name": "isa-i8259",
++      "parent": "pic-common"
++    },
++    {
++      "name": "virtio-gpu-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "i82551",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pc-i440fx-2.0-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "SandyBridge-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "split-irq",
++      "parent": "device"
++    },
++    {
++      "name": "usb-mouse",
++      "parent": "usb-hid"
++    },
++    {
++      "name": "sdhci-bus",
++      "parent": "sd-bus"
++    },
++    {
++      "name": "i82550",
++      "parent": "pci-device"
++    },
++    {
++      "name": "host-x86_64-cpu",
++      "parent": "max-x86_64-cpu"
++    },
++    {
++      "name": "virtio-crypto-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "ich9-usb-ehci1",
++      "parent": "pci-ehci-usb"
++    },
++    {
++      "name": "ich9-usb-ehci2",
++      "parent": "pci-ehci-usb"
++    },
++    {
++      "name": "vfio-pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "filter-mirror",
++      "parent": "netfilter"
++    },
++    {
++      "name": "isa-ide",
++      "parent": "isa-device"
++    },
++    {
++      "name": "irq",
++      "parent": "object"
++    },
++    {
++      "name": "throttle-group",
++      "parent": "object"
++    },
++    {
++      "name": "IvyBridge-IBRS-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "memory-backend-memfd",
++      "parent": "memory-backend"
++    },
++    {
++      "name": "can-host-socketcan",
++      "parent": "can-host"
++    },
++    {
++      "name": "nec-usb-xhci",
++      "parent": "base-xhci"
++    },
++    {
++      "name": "qio-channel-socket",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "pvscsi",
++      "parent": "pci-device"
++    },
++    {
++      "name": "piix3-usb-uhci",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "virtserialport",
++      "parent": "virtio-serial-port"
++    },
++    {
++      "name": "sd-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "Opteron_G5-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "ich9-ahci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "chardev-stdio",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "Skylake-Client-IBRS-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pc-dimm",
++      "parent": "device"
++    },
++    {
++      "name": "gus",
++      "parent": "isa-device"
++    },
++    {
++      "name": "hyperv-testdev",
++      "parent": "isa-device"
++    },
++    {
++      "name": "isa-vga",
++      "parent": "isa-device"
++    },
++    {
++      "name": "pc-i440fx-2.2-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "xen-pci-passthrough",
++      "parent": "pci-device"
++    },
++    {
++      "name": "cryptodev-backend",
++      "parent": "object"
++    },
++    {
++      "name": "IndustryPack",
++      "parent": "bus"
++    },
++    {
++      "name": "pc-i440fx-2.1-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "or-irq",
++      "parent": "device"
++    },
++    {
++      "name": "ipmi-bmc-sim",
++      "parent": "ipmi-bmc"
++    },
++    {
++      "name": "Broadwell-noTSX-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "usb-ehci",
++      "parent": "pci-ehci-usb"
++    },
++    {
++      "name": "pentium2-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "chardev-vc",
++      "parent": "chardev"
++    },
++    {
++      "name": "virtio-rng-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "filter-replay",
++      "parent": "netfilter"
++    },
++    {
++      "name": "e1000-82545em",
++      "parent": "e1000-base"
++    },
++    {
++      "name": "chardev-wctablet",
++      "parent": "chardev"
++    },
++    {
++      "name": "pc-i440fx-2.5-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "e1000-82544gc",
++      "parent": "e1000-base"
++    },
++    {
++      "name": "hpet",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "Broadwell-noTSX-IBRS-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "ioh3420",
++      "parent": "pcie-root-port-base"
++    },
++    {
++      "name": "pc-i440fx-2.4-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "virtio-9p-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "vmcoreinfo",
++      "parent": "device"
++    },
++    {
++      "name": "filter-buffer",
++      "parent": "netfilter"
++    },
++    {
++      "name": "pci-serial-4x",
++      "parent": "pci-device"
++    },
++    {
++      "name": "athlon-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "ich9-intel-hda",
++      "parent": "intel-hda-generic"
++    },
++    {
++      "name": "pc-i440fx-2.3-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "virtio-9p-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "ivshmem",
++      "parent": "ivshmem-common"
++    },
++    {
++      "name": "imx-usdhc",
++      "parent": "generic-sdhci"
++    },
++    {
++      "name": "isa-ipmi-bt",
++      "parent": "isa-device"
++    },
++    {
++      "name": "ipoctal232",
++      "parent": "ipack-device"
++    },
++    {
++      "name": "virtio-tablet-device",
++      "parent": "virtio-input-hid-device"
++    },
++    {
++      "name": "virtio-scsi-pci",
++      "parent": "virtio-pci"
++    },
++    {
++      "name": "piix3-ide",
++      "parent": "pci-ide"
++    },
++    {
++      "name": "ES1370",
++      "parent": "pci-device"
++    },
++    {
++      "name": "xen-pvdevice",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtio-pci-bus",
++      "parent": "virtio-bus"
++    },
++    {
++      "name": "x3130-upstream",
++      "parent": "pcie-port"
++    },
++    {
++      "name": "xenfv-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "pci-testdev",
++      "parent": "pci-device"
++    },
++    {
++      "name": "qemu-console",
++      "parent": "object"
++    },
++    {
++      "name": "ISA",
++      "parent": "bus"
++    },
++    {
++      "name": "piix4-usb-uhci",
++      "parent": "pci-uhci-usb"
++    },
++    {
++      "name": "pc-i440fx-2.7-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "tcg-accel",
++      "parent": "accel"
++    },
++    {
++      "name": "virtconsole",
++      "parent": "virtserialport"
++    },
++    {
++      "name": "pentium3-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pci-serial-2x",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ne2k_isa",
++      "parent": "isa-device"
++    },
++    {
++      "name": "Nehalem-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "isa-fdc",
++      "parent": "isa-device"
++    },
++    {
++      "name": "pc-i440fx-2.6-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "xen-platform",
++      "parent": "pci-device"
++    },
++    {
++      "name": "chardev-serial",
++      "parent": "chardev-fd"
++    },
++    {
++      "name": "igd-passthrough-i440FX",
++      "parent": "i440FX"
++    },
++    {
++      "name": "colo-compare",
++      "parent": "object"
++    },
++    {
++      "name": "e1000e",
++      "parent": "pci-device"
++    },
++    {
++      "name": "virtio-tablet-pci",
++      "parent": "virtio-input-hid-pci"
++    },
++    {
++      "name": "usb-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "smc37c669-superio",
++      "parent": "isa-superio"
++    },
++    {
++      "name": "i82801b11-bridge",
++      "parent": "base-pci-bridge"
++    },
++    {
++      "name": "PCI",
++      "parent": "bus"
++    },
++    {
++      "name": "usb-storage",
++      "parent": "usb-storage-dev"
++    },
++    {
++      "name": "vhost-user-scsi",
++      "parent": "vhost-scsi-common"
++    },
++    {
++      "name": "mch",
++      "parent": "pci-device"
++    },
++    {
++      "name": "ib700",
++      "parent": "isa-device"
++    },
++    {
++      "name": "esp",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "isabus-bridge",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "vhost-user-blk",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "qemu32-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "ne2k_pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "Broadwell-IBRS-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "tpm-emulator",
++      "parent": "tpm-backend"
++    },
++    {
++      "name": "ivshmem-plain",
++      "parent": "ivshmem-common"
++    },
++    {
++      "name": "usb-kbd",
++      "parent": "usb-hid"
++    },
++    {
++      "name": "isa-applesmc",
++      "parent": "isa-device"
++    },
++    {
++      "name": "xen-accel",
++      "parent": "accel"
++    },
++    {
++      "name": "secret",
++      "parent": "object"
++    },
++    {
++      "name": "hda-duplex",
++      "parent": "hda-audio"
++    },
++    {
++      "name": "kvm32-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pc-i440fx-2.9-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "kvm-apic",
++      "parent": "apic-common"
++    },
++    {
++      "name": "sev-guest",
++      "parent": "object"
++    },
++    {
++      "name": "virtio-balloon-device",
++      "parent": "virtio-device"
++    },
++    {
++      "name": "none-machine",
++      "parent": "machine"
++    },
++    {
++      "name": "sysbus-fdc",
++      "parent": "base-sysbus-fdc"
++    },
++    {
++      "name": "megasas-gen2",
++      "parent": "megasas-base"
++    },
++    {
++      "name": "pc-1.0-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "core2duo-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "qxl",
++      "parent": "pci-qxl"
++    },
++    {
++      "name": "ramfb",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "pc-i440fx-2.8-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "nvme",
++      "parent": "pci-device"
++    },
++    {
++      "name": "isa-debugcon",
++      "parent": "isa-device"
++    },
++    {
++      "name": "SandyBridge-IBRS-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "Skylake-Server-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pentium-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "usb-tablet",
++      "parent": "usb-hid"
++    },
++    {
++      "name": "qio-channel-buffer",
++      "parent": "qio-channel"
++    },
++    {
++      "name": "scsi-disk",
++      "parent": "scsi-disk-base"
++    },
++    {
++      "name": "usb-braille",
++      "parent": "usb-serial-dev"
++    },
++    {
++      "name": "intel-hda",
++      "parent": "intel-hda-generic"
++    },
++    {
++      "name": "kvm-accel",
++      "parent": "accel"
++    },
++    {
++      "name": "pxb-pcie-bus",
++      "parent": "PCIE"
++    },
++    {
++      "name": "virtio-scsi-device",
++      "parent": "virtio-scsi-common"
++    },
++    {
++      "name": "AC97",
++      "parent": "pci-device"
++    },
++    {
++      "name": "usb-wacom-tablet",
++      "parent": "usb-device"
++    },
++    {
++      "name": "i2c-bus",
++      "parent": "bus"
++    },
++    {
++      "name": "EPYC-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "virtio-mouse-device",
++      "parent": "virtio-input-hid-device"
++    },
++    {
++      "name": "Conroe-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "pxb-pcie",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pc-1.3-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "ide-drive",
++      "parent": "ide-device"
++    },
++    {
++      "name": "generic-sdhci",
++      "parent": "sys-bus-device"
++    },
++    {
++      "name": "isa-pit",
++      "parent": "pit-common"
++    },
++    {
++      "name": "pxb",
++      "parent": "pci-device"
++    },
++    {
++      "name": "pc-1.2-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "intel-iommu-iommu-memory-region",
++      "parent": "qemu:iommu-memory-region"
++    },
++    {
++      "name": "pc-1.1-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "sd-card",
++      "parent": "device"
++    },
++    {
++      "name": "kvaser_pci",
++      "parent": "pci-device"
++    },
++    {
++      "name": "vmxnet3",
++      "parent": "pci-device"
++    },
++    {
++      "name": "i6300esb",
++      "parent": "pci-device"
++    },
++    {
++      "name": "Westmere-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "amd-iommu-iommu-memory-region",
++      "parent": "qemu:iommu-memory-region"
++    },
++    {
++      "name": "pvpanic",
++      "parent": "isa-device"
++    },
++    {
++      "name": "Penryn-x86_64-cpu",
++      "parent": "x86_64-cpu"
++    },
++    {
++      "name": "apic",
++      "parent": "apic-common"
++    },
++    {
++      "name": "isapc-machine",
++      "parent": "generic-pc-machine"
++    },
++    {
++      "name": "rng-random",
++      "parent": "rng-backend"
++    }
++  ],
++  "id": "libvirt-9"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-blk-pci"
++  },
++  "id": "libvirt-10"
++}
++
++{
++  "return": [
++    {
++      "name": "iothread",
++      "type": "link<iothread>"
++    },
++    {
++      "name": "secs",
++      "type": "uint32"
++    },
++    {
++      "name": "request-merging",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "heads",
++      "type": "uint32"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "scsi",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "cyls",
++      "type": "uint32"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "queue-size",
++      "type": "uint16"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "config-wce",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "class",
++      "type": "uint32"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-blk-device>"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "num-queues",
++      "type": "uint16"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-10"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-net-pci"
++  },
++  "id": "libvirt-11"
++}
++
++{
++  "return": [
++    {
++      "name": "ctrl_mac_addr",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "status",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_csum",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "speed",
++      "type": "int32"
++    },
++    {
++      "name": "ctrl_rx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ctrl_vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "mrg_rxbuf",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_tso6",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-txtimer",
++      "type": "uint32"
++    },
++    {
++      "name": "host_tso4",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "ctrl_rx_extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "gso",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "x-txburst",
++      "type": "int32"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_mtu",
++      "type": "uint16"
++    },
++    {
++      "name": "ctrl_vlan",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-net-device>"
++    },
++    {
++      "name": "guest_announce",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "guest_tso4",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_ecn",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "host_ufo",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "duplex",
++      "type": "str"
++    },
++    {
++      "name": "guest_tso6",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ctrl_guest_offloads",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "csum",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "mq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_ecn",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest_ufo",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "mac",
++      "description": "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
++      "type": "str"
++    },
++    {
++      "name": "tx_queue_size",
++      "type": "uint16"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "tx",
++      "type": "str"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-mtu-bypass-backend",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "netdev",
++      "description": "ID of a netdev to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rx_queue_size",
++      "type": "uint16"
++    }
++  ],
++  "id": "libvirt-11"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-scsi-pci"
++  },
++  "id": "libvirt-12"
++}
++
++{
++  "return": [
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "virtqueue_size",
++      "type": "uint32"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "cmd_per_lun",
++      "type": "uint32"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "num_queues",
++      "type": "uint32"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "hotplug",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "max_sectors",
++      "type": "uint32"
++    },
++    {
++      "name": "param_change",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iothread",
++      "type": "link<iothread>"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-scsi-device>"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-12"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-net-ccw"
++  },
++  "id": "libvirt-13"
++}
++
++{
++  "id": "libvirt-13",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-net-ccw' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-scsi-ccw"
++  },
++  "id": "libvirt-14"
++}
++
++{
++  "id": "libvirt-14",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-scsi-ccw' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-net-s390"
++  },
++  "id": "libvirt-15"
++}
++
++{
++  "id": "libvirt-15",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-net-s390' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "pci-assign"
++  },
++  "id": "libvirt-16"
++}
++
++{
++  "id": "libvirt-16",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'pci-assign' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "kvm-pci-assign"
++  },
++  "id": "libvirt-17"
++}
++
++{
++  "id": "libvirt-17",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'kvm-pci-assign' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "vfio-pci"
++  },
++  "id": "libvirt-18"
++}
++
++{
++  "return": [
++    {
++      "name": "x-igd-opregion",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pci-vendor-id",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pci-sub-device-id",
++      "type": "uint32"
++    },
++    {
++      "name": "x-no-kvm-ioeventfd",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-req",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-no-kvm-msi",
++      "type": "bool"
++    },
++    {
++      "name": "x-no-vfio-ioeventfd",
++      "type": "bool"
++    },
++    {
++      "name": "x-no-kvm-intx",
++      "type": "bool"
++    },
++    {
++      "name": "host",
++      "description": "Address (bus/device/function) of the host device, example: 04:10.0",
++      "type": "str"
++    },
++    {
++      "name": "x-no-kvm-msix",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pci-sub-vendor-id",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pci-device-id",
++      "type": "uint32"
++    },
++    {
++      "name": "x-no-geforce-quirks",
++      "type": "bool"
++    },
++    {
++      "name": "display",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "x-igd-gms",
++      "type": "uint32"
++    },
++    {
++      "name": "x-nv-gpudirect-clique",
++      "description": "NVIDIA GPUDirect Clique ID (0 - 15)",
++      "type": "uint4"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "x-msix-relocation",
++      "description": "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
++      "type": "OffAutoPCIBAR"
++    },
++    {
++      "name": "x-intx-mmap-timeout-ms",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-no-mmap",
++      "type": "bool"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "sysfsdev",
++      "type": "str"
++    },
++    {
++      "name": "x-vga",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-18"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "scsi-disk"
++  },
++  "id": "libvirt-19"
++}
++
++{
++  "return": [
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "removable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "channel",
++      "type": "uint32"
++    },
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "lun",
++      "type": "uint32"
++    },
++    {
++      "name": "dpofua",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ver",
++      "type": "str"
++    },
++    {
++      "name": "scsi-id",
++      "type": "uint32"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "scsi_version",
++      "type": "int32"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "port_wwn",
++      "type": "uint64"
++    },
++    {
++      "name": "max_unmap_size",
++      "type": "uint64"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "max_io_size",
++      "type": "uint64"
++    },
++    {
++      "name": "wwn",
++      "type": "uint64"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "product",
++      "type": "str"
++    },
++    {
++      "name": "vendor",
++      "type": "str"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "port_index",
++      "type": "uint16"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-19"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "ide-drive"
++  },
++  "id": "libvirt-20"
++}
++
++{
++  "return": [
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "unit",
++      "type": "uint32"
++    },
++    {
++      "name": "wwn",
++      "type": "uint64"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "model",
++      "type": "str"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "ver",
++      "type": "str"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    }
++  ],
++  "id": "libvirt-20"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "PIIX4_PM"
++  },
++  "id": "libvirt-21"
++}
++
++{
++  "return": [
++    {
++      "name": "memory-hotplug-support",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "acpi-pci-hotplug-with-bridge-support",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "disable_s4",
++      "type": "uint8"
++    },
++    {
++      "name": "disable_s3",
++      "type": "uint8"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "s4_val",
++      "type": "uint8"
++    },
++    {
++      "name": "smb_io_base",
++      "type": "uint32"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    }
++  ],
++  "id": "libvirt-21"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "usb-redir"
++  },
++  "id": "libvirt-22"
++}
++
++{
++  "return": [
++    {
++      "name": "filter",
++      "type": "str"
++    },
++    {
++      "name": "msos-desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "port",
++      "type": "str"
++    },
++    {
++      "name": "debug",
++      "type": "uint8"
++    },
++    {
++      "name": "streams",
++      "type": "bool"
++    },
++    {
++      "name": "chardev",
++      "description": "ID of a chardev to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "full-path",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "attached",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-22"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "usb-host"
++  },
++  "id": "libvirt-23"
++}
++
++{
++  "return": [
++    {
++      "name": "isobufs",
++      "type": "uint32"
++    },
++    {
++      "name": "hostaddr",
++      "type": "uint32"
++    },
++    {
++      "name": "msos-desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "productid",
++      "type": "uint32"
++    },
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "isobsize",
++      "type": "uint32"
++    },
++    {
++      "name": "port",
++      "type": "str"
++    },
++    {
++      "name": "vendorid",
++      "type": "uint32"
++    },
++    {
++      "name": "pipeline",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "attached",
++      "type": "bool"
++    },
++    {
++      "name": "hostport",
++      "type": "str"
++    },
++    {
++      "name": "full-path",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "loglevel",
++      "type": "uint32"
++    },
++    {
++      "name": "hostbus",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-23"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "scsi-generic"
++  },
++  "id": "libvirt-24"
++}
++
++{
++  "return": [
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "lun",
++      "type": "uint32"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "channel",
++      "type": "uint32"
++    },
++    {
++      "name": "scsi-id",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-24"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "i440FX-pcihost"
++  },
++  "id": "libvirt-25"
++}
++
++{
++  "return": [
++    {
++      "name": "short_root_bus",
++      "type": "uint32"
++    },
++    {
++      "name": "pci-conf-idx[0]",
++      "type": "child<qemu:memory-region>"
++    },
++    {
++      "name": "pci-hole64-end",
++      "type": "uint64"
++    },
++    {
++      "name": "pci-hole-end",
++      "type": "uint32"
++    },
++    {
++      "name": "pci-hole-start",
++      "type": "uint32"
++    },
++    {
++      "name": "pci-hole64-start",
++      "type": "uint64"
++    },
++    {
++      "name": "pci-hole64-size",
++      "type": "size"
++    },
++    {
++      "name": "pci-conf-data[0]",
++      "type": "child<qemu:memory-region>"
++    },
++    {
++      "name": "x-pci-hole64-fix",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-25"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "q35-pcihost"
++  },
++  "id": "libvirt-26"
++}
++
++{
++  "return": [
++    {
++      "name": "short_root_bus",
++      "type": "uint32"
++    },
++    {
++      "name": "system-mem",
++      "type": "link<qemu:memory-region>"
++    },
++    {
++      "name": "pci-conf-idx[0]",
++      "type": "child<qemu:memory-region>"
++    },
++    {
++      "name": "pcie-mmcfg-mmio[0]",
++      "type": "child<qemu:memory-region>"
++    },
++    {
++      "name": "pci-hole64-start",
++      "type": "uint64"
++    },
++    {
++      "name": "io-mem",
++      "type": "link<qemu:memory-region>"
++    },
++    {
++      "name": "pci-hole64-end",
++      "type": "uint64"
++    },
++    {
++      "name": "pci-hole-end",
++      "type": "uint32"
++    },
++    {
++      "name": "above-4g-mem-size",
++      "type": "size"
++    },
++    {
++      "name": "below-4g-mem-size",
++      "type": "size"
++    },
++    {
++      "name": "ram-mem",
++      "type": "link<qemu:memory-region>"
++    },
++    {
++      "name": "pci-hole-start",
++      "type": "uint32"
++    },
++    {
++      "name": "MCFG",
++      "type": "uint64"
++    },
++    {
++      "name": "mch",
++      "type": "child<mch>"
++    },
++    {
++      "name": "pci-hole64-size",
++      "type": "size"
++    },
++    {
++      "name": "pci-mem",
++      "type": "link<qemu:memory-region>"
++    },
++    {
++      "name": "pci-conf-data[0]",
++      "type": "child<qemu:memory-region>"
++    },
++    {
++      "name": "x-pci-hole64-fix",
++      "type": "bool"
++    },
++    {
++      "name": "mcfg_size",
++      "type": "uint64"
++    }
++  ],
++  "id": "libvirt-26"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "usb-storage"
++  },
++  "id": "libvirt-27"
++}
++
++{
++  "return": [
++    {
++      "name": "serial",
++      "type": "str"
++    },
++    {
++      "name": "msos-desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "logical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    },
++    {
++      "name": "discard_granularity",
++      "type": "uint32"
++    },
++    {
++      "name": "drive",
++      "description": "Node name or ID of a block device to use as a backend",
++      "type": "str"
++    },
++    {
++      "name": "bootindex",
++      "type": "int32"
++    },
++    {
++      "name": "write-cache",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "share-rw",
++      "type": "bool"
++    },
++    {
++      "name": "opt_io_size",
++      "type": "uint32"
++    },
++    {
++      "name": "min_io_size",
++      "type": "uint16"
++    },
++    {
++      "name": "port",
++      "type": "str"
++    },
++    {
++      "name": "attached",
++      "type": "bool"
++    },
++    {
++      "name": "werror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "full-path",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rerror",
++      "description": "Error handling policy, report/ignore/enospc/stop/auto",
++      "type": "BlockdevOnError"
++    },
++    {
++      "name": "removable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "physical_block_size",
++      "description": "A power of two between 512 and 32768",
++      "type": "uint16"
++    }
++  ],
++  "id": "libvirt-27"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "kvm-pit"
++  },
++  "id": "libvirt-28"
++}
++
++{
++  "return": [
++    {
++      "name": "iobase",
++      "type": "uint32"
++    },
++    {
++      "name": "lost_tick_policy",
++      "type": "LostTickPolicy"
++    }
++  ],
++  "id": "libvirt-28"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "VGA"
++  },
++  "id": "libvirt-29"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "mmio",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "qemu-extended-regs",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "big-endian-framebuffer",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "vgamem_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "global-vmstate",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-29"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "vmware-svga"
++  },
++  "id": "libvirt-30"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "vgamem_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "global-vmstate",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-30"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "qxl"
++  },
++  "id": "libvirt-31"
++}
++
++{
++  "return": [
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "yres",
++      "type": "uint32"
++    },
++    {
++      "name": "ram_size_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "global-vmstate",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vgamem_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "debug",
++      "type": "uint32"
++    },
++    {
++      "name": "vram_size_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "revision",
++      "type": "uint32"
++    },
++    {
++      "name": "ram_size",
++      "type": "uint32"
++    },
++    {
++      "name": "vram64_size_mb",
++      "type": "uint32"
++    },
++    {
++      "name": "guestdebug",
++      "type": "uint32"
++    },
++    {
++      "name": "vram_size",
++      "type": "uint64"
++    },
++    {
++      "name": "surfaces",
++      "type": "int32"
++    },
++    {
++      "name": "max_outputs",
++      "type": "uint16"
++    },
++    {
++      "name": "xres",
++      "type": "uint32"
++    },
++    {
++      "name": "cmdlog",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-31"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-gpu-pci"
++  },
++  "id": "libvirt-32"
++}
++
++{
++  "return": [
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "yres",
++      "type": "uint32"
++    },
++    {
++      "name": "ioeventfd",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "xres",
++      "type": "uint32"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "max_outputs",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "vectors",
++      "type": "uint32"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-gpu-device>"
++    },
++    {
++      "name": "max_hostmem",
++      "type": "size"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "stats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virgl",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-32"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-gpu-device"
++  },
++  "id": "libvirt-33"
++}
++
++{
++  "return": [
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "yres",
++      "type": "uint32"
++    },
++    {
++      "name": "stats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "xres",
++      "type": "uint32"
++    },
++    {
++      "name": "max_outputs",
++      "type": "uint32"
++    },
++    {
++      "name": "virgl",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "max_hostmem",
++      "type": "size"
++    }
++  ],
++  "id": "libvirt-33"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "ICH9-LPC"
++  },
++  "id": "libvirt-34"
++}
++
++{
++  "return": [
++    {
++      "name": "memory-hotplug-support",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "sci_int",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "gpe0_blk_len",
++      "type": "uint32"
++    },
++    {
++      "name": "pm_io_base",
++      "type": "uint32"
++    },
++    {
++      "name": "noreboot",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "cpu-hotplug-legacy",
++      "type": "bool"
++    },
++    {
++      "name": "acpi_disable_cmd",
++      "type": "uint8"
++    },
++    {
++      "name": "x-smi-broadcast",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable_s3",
++      "type": "uint8"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "acpi_enable_cmd",
++      "type": "uint8"
++    },
++    {
++      "name": "s4_val",
++      "type": "uint8"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "enable_tco",
++      "type": "bool"
++    },
++    {
++      "name": "disable_s4",
++      "type": "uint8"
++    },
++    {
++      "name": "gpe0_blk",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-34"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-balloon-pci"
++  },
++  "id": "libvirt-35"
++}
++
++{
++  "return": [
++    {
++      "name": "guest-stats-polling-interval",
++      "type": "int"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-disable-pcie",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "disable-modern",
++      "type": "bool"
++    },
++    {
++      "name": "disable-legacy",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnkctl-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest-stats",
++      "type": "guest statistics"
++    },
++    {
++      "name": "deflate-on-oom",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "page-per-vq",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-deverr-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-pm-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "class",
++      "type": "uint32"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "migrate-extra",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "modern-pio-notify",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-backend",
++      "type": "child<virtio-balloon-device>"
++    },
++    {
++      "name": "x-ignore-backend-features",
++      "type": "bool"
++    },
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "ats",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "virtio-pci-bus-master-bug-migration",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    }
++  ],
++  "id": "libvirt-35"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-balloon-ccw"
++  },
++  "id": "libvirt-36"
++}
++
++{
++  "id": "libvirt-36",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Device 'virtio-balloon-ccw' not found"
++  }
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "virtio-balloon-device"
++  },
++  "id": "libvirt-37"
++}
++
++{
++  "return": [
++    {
++      "name": "notify_on_empty",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "any_layout",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "indirect_desc",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "guest-stats",
++      "type": "guest statistics"
++    },
++    {
++      "name": "guest-stats-polling-interval",
++      "type": "int"
++    },
++    {
++      "name": "event_idx",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "iommu_platform",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "deflate-on-oom",
++      "description": "on/off",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-37"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "nec-usb-xhci"
++  },
++  "id": "libvirt-38"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "intrs",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "msix",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "msi",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "superspeed-ports-first",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "streams",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "force-pcie-endcap",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    },
++    {
++      "name": "p3",
++      "type": "uint32"
++    },
++    {
++      "name": "p2",
++      "type": "uint32"
++    },
++    {
++      "name": "slots",
++      "type": "uint32"
++    }
++  ],
++  "id": "libvirt-38"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "intel-iommu"
++  },
++  "id": "libvirt-39"
++}
++
++{
++  "return": [
++    {
++      "name": "eim",
++      "description": "on/off/auto",
++      "type": "OnOffAuto"
++    },
++    {
++      "name": "x-aw-bits",
++      "type": "uint8"
++    },
++    {
++      "name": "x-buggy-eim",
++      "type": "bool"
++    },
++    {
++      "name": "intremap",
++      "type": "bool"
++    },
++    {
++      "name": "version",
++      "type": "uint32"
++    },
++    {
++      "name": "pt",
++      "type": "bool"
++    },
++    {
++      "name": "device-iotlb",
++      "type": "bool"
++    },
++    {
++      "name": "caching-mode",
++      "type": "bool"
++    }
++  ],
++  "id": "libvirt-39"
++}
++
++{
++  "execute": "device-list-properties",
++  "arguments": {
++    "typename": "mch"
++  },
++  "id": "libvirt-40"
++}
++
++{
++  "return": [
++    {
++      "name": "rombar",
++      "type": "uint32"
++    },
++    {
++      "name": "x-pcie-lnksta-dllla",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "multifunction",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "extended-tseg-mbytes",
++      "type": "uint16"
++    },
++    {
++      "name": "romfile",
++      "type": "str"
++    },
++    {
++      "name": "x-pcie-extcap-init",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "command_serr_enable",
++      "description": "on/off",
++      "type": "bool"
++    },
++    {
++      "name": "addr",
++      "description": "Slot and optional function number, example: 06.0 or 06",
++      "type": "int32"
++    }
++  ],
++  "id": "libvirt-40"
++}
++
++{
++  "execute": "qom-list-properties",
++  "arguments": {
++    "typename": "memory-backend-file"
++  },
++  "id": "libvirt-41"
++}
++
++{
++  "return": [
++    {
++      "name": "policy",
++      "type": "HostMemPolicy"
++    },
++    {
++      "name": "share",
++      "type": "bool"
++    },
++    {
++      "name": "host-nodes",
++      "type": "int"
++    },
++    {
++      "name": "prealloc",
++      "type": "bool"
++    },
++    {
++      "name": "dump",
++      "type": "bool"
++    },
++    {
++      "name": "size",
++      "type": "int"
++    },
++    {
++      "name": "merge",
++      "type": "bool"
++    },
++    {
++      "name": "align",
++      "type": "int"
++    },
++    {
++      "name": "mem-path",
++      "type": "string"
++    },
++    {
++      "name": "discard-data",
++      "type": "bool"
++    },
++    {
++      "name": "type",
++      "type": "string"
++    }
++  ],
++  "id": "libvirt-41"
++}
++
++{
++  "execute": "qom-list-properties",
++  "arguments": {
++    "typename": "spapr-machine"
++  },
++  "id": "libvirt-42"
++}
++
++{
++  "id": "libvirt-42",
++  "error": {
++    "class": "DeviceNotFound",
++    "desc": "Class 'spapr-machine' not found"
++  }
++}
++
++{
++  "execute": "query-machines",
++  "id": "libvirt-43"
++}
++
++{
++  "return": [
++    {
++      "hotpluggable-cpus": true,
++      "name": "isapc",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-1.1",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-1.2",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-1.3",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.8",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-1.0",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "none",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.9",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.6",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.7",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "xenfv",
++      "cpu-max": 128
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.3",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.4",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.5",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.1",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.2",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.0",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.11",
++      "cpu-max": 288
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.12",
++      "cpu-max": 288
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-3.0",
++      "cpu-max": 288,
++      "alias": "q35"
++    },
++    {
++      "hotpluggable-cpus": false,
++      "name": "xenpv",
++      "cpu-max": 1
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.10",
++      "cpu-max": 288
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-1.7",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.9",
++      "cpu-max": 288
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.15",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-1.5",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.7",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-1.6",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.11",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.8",
++      "cpu-max": 288
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.13",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.12",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.14",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-3.0",
++      "is-default": true,
++      "cpu-max": 255,
++      "alias": "pc"
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.4",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.5",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-q35-2.6",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-1.4",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-i440fx-2.10",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.11",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.12",
++      "cpu-max": 255
++    },
++    {
++      "hotpluggable-cpus": true,
++      "name": "pc-0.10",
++      "cpu-max": 255
++    }
++  ],
++  "id": "libvirt-43"
++}
++
++{
++  "execute": "query-cpu-definitions",
++  "id": "libvirt-44"
++}
++
++{
++  "return": [
++    {
++      "name": "max",
++      "typename": "max-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": false
++    },
++    {
++      "name": "host",
++      "typename": "host-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": false
++    },
++    {
++      "name": "base",
++      "typename": "base-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": true,
++      "migration-safe": true
++    },
++    {
++      "name": "qemu64",
++      "typename": "qemu64-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "qemu32",
++      "typename": "qemu32-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "phenom",
++      "typename": "phenom-x86_64-cpu",
++      "unavailable-features": [
++        "mmxext",
++        "fxsr-opt",
++        "3dnowext",
++        "3dnow",
++        "sse4a",
++        "npt"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium3",
++      "typename": "pentium3-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium2",
++      "typename": "pentium2-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium",
++      "typename": "pentium-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "n270",
++      "typename": "n270-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "kvm64",
++      "typename": "kvm64-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "kvm32",
++      "typename": "kvm32-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "coreduo",
++      "typename": "coreduo-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "core2duo",
++      "typename": "core2duo-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "athlon",
++      "typename": "athlon-x86_64-cpu",
++      "unavailable-features": [
++        "mmxext",
++        "3dnowext",
++        "3dnow"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Westmere-IBRS",
++      "typename": "Westmere-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Westmere",
++      "typename": "Westmere-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Server-IBRS",
++      "typename": "Skylake-Server-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "avx512f",
++        "avx512dq",
++        "clwb",
++        "avx512cd",
++        "avx512bw",
++        "avx512vl",
++        "spec-ctrl",
++        "avx512f",
++        "avx512f",
++        "avx512f"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Server",
++      "typename": "Skylake-Server-x86_64-cpu",
++      "unavailable-features": [
++        "avx512f",
++        "avx512dq",
++        "clwb",
++        "avx512cd",
++        "avx512bw",
++        "avx512vl",
++        "avx512f",
++        "avx512f",
++        "avx512f"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Client-IBRS",
++      "typename": "Skylake-Client-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Client",
++      "typename": "Skylake-Client-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "SandyBridge-IBRS",
++      "typename": "SandyBridge-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "SandyBridge",
++      "typename": "SandyBridge-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Penryn",
++      "typename": "Penryn-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G5",
++      "typename": "Opteron_G5-x86_64-cpu",
++      "unavailable-features": [
++        "sse4a",
++        "misalignsse",
++        "xop",
++        "fma4",
++        "tbm"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G4",
++      "typename": "Opteron_G4-x86_64-cpu",
++      "unavailable-features": [
++        "sse4a",
++        "misalignsse",
++        "xop",
++        "fma4"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G3",
++      "typename": "Opteron_G3-x86_64-cpu",
++      "unavailable-features": [
++        "sse4a",
++        "misalignsse"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G2",
++      "typename": "Opteron_G2-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G1",
++      "typename": "Opteron_G1-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Nehalem-IBRS",
++      "typename": "Nehalem-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Nehalem",
++      "typename": "Nehalem-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "KnightsMill",
++      "typename": "KnightsMill-x86_64-cpu",
++      "unavailable-features": [
++        "avx512f",
++        "avx512pf",
++        "avx512er",
++        "avx512cd",
++        "avx512-vpopcntdq",
++        "avx512-4vnniw",
++        "avx512-4fmaps",
++        "avx512f",
++        "avx512f",
++        "avx512f"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "IvyBridge-IBRS",
++      "typename": "IvyBridge-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "IvyBridge",
++      "typename": "IvyBridge-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell-noTSX-IBRS",
++      "typename": "Haswell-noTSX-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell-noTSX",
++      "typename": "Haswell-noTSX-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell-IBRS",
++      "typename": "Haswell-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell",
++      "typename": "Haswell-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "EPYC-IBPB",
++      "typename": "EPYC-IBPB-x86_64-cpu",
++      "unavailable-features": [
++        "sha-ni",
++        "mmxext",
++        "fxsr-opt",
++        "cr8legacy",
++        "sse4a",
++        "misalignsse",
++        "osvw",
++        "ibpb"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "EPYC",
++      "typename": "EPYC-x86_64-cpu",
++      "unavailable-features": [
++        "sha-ni",
++        "mmxext",
++        "fxsr-opt",
++        "cr8legacy",
++        "sse4a",
++        "misalignsse",
++        "osvw"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Conroe",
++      "typename": "Conroe-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell-noTSX-IBRS",
++      "typename": "Broadwell-noTSX-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell-noTSX",
++      "typename": "Broadwell-noTSX-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell-IBRS",
++      "typename": "Broadwell-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell",
++      "typename": "Broadwell-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "486",
++      "typename": "486-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    }
++  ],
++  "id": "libvirt-44"
++}
++
++{
++  "execute": "query-tpm-models",
++  "id": "libvirt-45"
++}
++
++{
++  "return": [
++    "tpm-crb",
++    "tpm-tis"
++  ],
++  "id": "libvirt-45"
++}
++
++{
++  "execute": "query-tpm-types",
++  "id": "libvirt-46"
++}
++
++{
++  "return": [
++    "passthrough",
++    "emulator"
++  ],
++  "id": "libvirt-46"
++}
++
++{
++  "execute": "query-command-line-options",
++  "id": "libvirt-47"
++}
++
++{
++  "return": [
++    {
++      "parameters": [
++        {
++          "name": "timeout",
++          "help": "Request timeout in seconds (default 0 = no timeout)",
++          "type": "number"
++        },
++        {
++          "name": "initiator-name",
++          "help": "Initiator iqn name to use when connecting",
++          "type": "string"
++        },
++        {
++          "name": "header-digest",
++          "help": "HeaderDigest setting. {CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
++          "type": "string"
++        },
++        {
++          "name": "password-secret",
++          "help": "ID of the secret providing password for CHAP authentication to target",
++          "type": "string"
++        },
++        {
++          "name": "password",
++          "help": "password for CHAP authentication to target",
++          "type": "string"
++        },
++        {
++          "name": "user",
++          "help": "username for CHAP authentication to target",
++          "type": "string"
++        }
++      ],
++      "option": "iscsi"
++    },
++    {
++      "parameters": [
++        {
++          "name": "non-adaptive",
++          "type": "boolean"
++        },
++        {
++          "name": "lossy",
++          "type": "boolean"
++        },
++        {
++          "name": "acl",
++          "type": "boolean"
++        },
++        {
++          "name": "x509verify",
++          "type": "string"
++        },
++        {
++          "name": "tls",
++          "type": "boolean"
++        },
++        {
++          "name": "sasl",
++          "type": "boolean"
++        },
++        {
++          "name": "key-delay-ms",
++          "type": "number"
++        },
++        {
++          "name": "lock-key-sync",
++          "type": "boolean"
++        },
++        {
++          "name": "reverse",
++          "type": "boolean"
++        },
++        {
++          "name": "password",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv6",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv4",
++          "type": "boolean"
++        },
++        {
++          "name": "to",
++          "type": "number"
++        },
++        {
++          "name": "connections",
++          "type": "number"
++        },
++        {
++          "name": "head",
++          "type": "number"
++        },
++        {
++          "name": "display",
++          "type": "string"
++        },
++        {
++          "name": "share",
++          "type": "string"
++        },
++        {
++          "name": "x509",
++          "type": "string"
++        },
++        {
++          "name": "tls-creds",
++          "type": "string"
++        },
++        {
++          "name": "websocket",
++          "type": "string"
++        },
++        {
++          "name": "vnc",
++          "type": "string"
++        }
++      ],
++      "option": "vnc"
++    },
++    {
++      "parameters": [
++        {
++          "name": "head",
++          "type": "number"
++        },
++        {
++          "name": "display",
++          "type": "string"
++        },
++        {
++          "name": "seamless-migration",
++          "type": "boolean"
++        },
++        {
++          "name": "playback-compression",
++          "type": "boolean"
++        },
++        {
++          "name": "agent-mouse",
++          "type": "boolean"
++        },
++        {
++          "name": "streaming-video",
++          "type": "string"
++        },
++        {
++          "name": "zlib-glz-wan-compression",
++          "type": "string"
++        },
++        {
++          "name": "jpeg-wan-compression",
++          "type": "string"
++        },
++        {
++          "name": "image-compression",
++          "type": "string"
++        },
++        {
++          "name": "plaintext-channel",
++          "type": "string"
++        },
++        {
++          "name": "tls-channel",
++          "type": "string"
++        },
++        {
++          "name": "tls-ciphers",
++          "type": "string"
++        },
++        {
++          "name": "x509-dh-key-file",
++          "type": "string"
++        },
++        {
++          "name": "x509-cacert-file",
++          "type": "string"
++        },
++        {
++          "name": "x509-cert-file",
++          "type": "string"
++        },
++        {
++          "name": "x509-key-password",
++          "type": "string"
++        },
++        {
++          "name": "x509-key-file",
++          "type": "string"
++        },
++        {
++          "name": "x509-dir",
++          "type": "string"
++        },
++        {
++          "name": "sasl",
++          "type": "boolean"
++        },
++        {
++          "name": "disable-agent-file-xfer",
++          "type": "boolean"
++        },
++        {
++          "name": "disable-copy-paste",
++          "type": "boolean"
++        },
++        {
++          "name": "disable-ticketing",
++          "type": "boolean"
++        },
++        {
++          "name": "password",
++          "type": "string"
++        },
++        {
++          "name": "unix",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv6",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv4",
++          "type": "boolean"
++        },
++        {
++          "name": "addr",
++          "type": "string"
++        },
++        {
++          "name": "tls-port",
++          "type": "number"
++        },
++        {
++          "name": "port",
++          "type": "number"
++        }
++      ],
++      "option": "spice"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "smbios"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "acpi"
++    },
++    {
++      "parameters": [
++        {
++          "name": "dmode",
++          "type": "number"
++        },
++        {
++          "name": "fmode",
++          "type": "number"
++        },
++        {
++          "name": "sock_fd",
++          "type": "number"
++        },
++        {
++          "name": "socket",
++          "type": "string"
++        },
++        {
++          "name": "readonly",
++          "type": "boolean"
++        },
++        {
++          "name": "writeout",
++          "type": "string"
++        },
++        {
++          "name": "security_model",
++          "type": "string"
++        },
++        {
++          "name": "mount_tag",
++          "type": "string"
++        },
++        {
++          "name": "path",
++          "type": "string"
++        },
++        {
++          "name": "fsdriver",
++          "type": "string"
++        }
++      ],
++      "option": "virtfs"
++    },
++    {
++      "parameters": [
++        {
++          "name": "throttling.iops-size",
++          "help": "when limiting by iops max size of an I/O in bytes",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max-length",
++          "help": "length of the bps-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max-length",
++          "help": "length of the bps-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max-length",
++          "help": "length of the bps-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max-length",
++          "help": "length of the iops-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max-length",
++          "help": "length of the iops-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max-length",
++          "help": "length of the iops-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max",
++          "help": "total bytes write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max",
++          "help": "total bytes read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max",
++          "help": "total bytes burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max",
++          "help": "I/O operations write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max",
++          "help": "I/O operations read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max",
++          "help": "I/O operations burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write",
++          "help": "limit write bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read",
++          "help": "limit read bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total",
++          "help": "limit total bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write",
++          "help": "limit write operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read",
++          "help": "limit read operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total",
++          "help": "limit total I/O operations per second",
++          "type": "number"
++        },
++        {
++          "name": "dmode",
++          "type": "number"
++        },
++        {
++          "name": "fmode",
++          "type": "number"
++        },
++        {
++          "name": "sock_fd",
++          "type": "number"
++        },
++        {
++          "name": "socket",
++          "type": "string"
++        },
++        {
++          "name": "readonly",
++          "type": "boolean"
++        },
++        {
++          "name": "writeout",
++          "type": "string"
++        },
++        {
++          "name": "security_model",
++          "type": "string"
++        },
++        {
++          "name": "path",
++          "type": "string"
++        },
++        {
++          "name": "fsdriver",
++          "type": "string"
++        }
++      ],
++      "option": "fsdev"
++    },
++    {
++      "parameters": [
++        {
++          "name": "resourcecontrol",
++          "type": "string"
++        },
++        {
++          "name": "spawn",
++          "type": "string"
++        },
++        {
++          "name": "elevateprivileges",
++          "type": "string"
++        },
++        {
++          "name": "obsolete",
++          "type": "string"
++        },
++        {
++          "name": "enable",
++          "type": "boolean"
++        }
++      ],
++      "option": "sandbox"
++    },
++    {
++      "parameters": [
++        {
++          "name": "string",
++          "help": "Sets content of the blob to be inserted from a string",
++          "type": "string"
++        },
++        {
++          "name": "file",
++          "help": "Sets the name of the file from which\nthe fw_cfg blob will be loaded",
++          "type": "string"
++        },
++        {
++          "name": "name",
++          "help": "Sets the fw_cfg name of the blob to be inserted",
++          "type": "string"
++        }
++      ],
++      "option": "fw_cfg"
++    },
++    {
++      "parameters": [
++        {
++          "name": "arg",
++          "type": "string"
++        },
++        {
++          "name": "target",
++          "type": "string"
++        },
++        {
++          "name": "enable",
++          "type": "boolean"
++        }
++      ],
++      "option": "semihosting-config"
++    },
++    {
++      "parameters": [
++        {
++          "name": "rrsnapshot",
++          "type": "string"
++        },
++        {
++          "name": "rrfile",
++          "type": "string"
++        },
++        {
++          "name": "rr",
++          "type": "string"
++        },
++        {
++          "name": "sleep",
++          "type": "boolean"
++        },
++        {
++          "name": "align",
++          "type": "boolean"
++        },
++        {
++          "name": "shift",
++          "type": "string"
++        }
++      ],
++      "option": "icount"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "numa"
++    },
++    {
++      "parameters": [
++        {
++          "name": "debug-threads",
++          "help": "When enabled, name the individual threads; defaults off.\nNOTE: The thread names are for debugging and not a\nstable API.",
++          "type": "boolean"
++        },
++        {
++          "name": "process",
++          "help": "Sets the name of the QEMU process, as shown in top etc",
++          "type": "string"
++        },
++        {
++          "name": "guest",
++          "help": "Sets the name of the guest.\nThis name will be displayed in the SDL window caption.\nThe name will also be used for the VNC server",
++          "type": "string"
++        }
++      ],
++      "option": "name"
++    },
++    {
++      "parameters": [
++        {
++          "name": "timestamp",
++          "type": "boolean"
++        }
++      ],
++      "option": "msg"
++    },
++    {
++      "parameters": [
++        {
++          "name": "mlock",
++          "type": "boolean"
++        }
++      ],
++      "option": "realtime"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "tpmdev"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "object"
++    },
++    {
++      "parameters": [
++        {
++          "name": "opaque",
++          "help": "free-form string used to describe fd",
++          "type": "string"
++        },
++        {
++          "name": "set",
++          "help": "ID of the fd set to add fd to",
++          "type": "number"
++        },
++        {
++          "name": "fd",
++          "help": "file descriptor of which a duplicate is added to fd set",
++          "type": "number"
++        }
++      ],
++      "option": "add-fd"
++    },
++    {
++      "parameters": [
++        {
++          "name": "strict",
++          "type": "boolean"
++        },
++        {
++          "name": "reboot-timeout",
++          "type": "string"
++        },
++        {
++          "name": "splash-time",
++          "type": "string"
++        },
++        {
++          "name": "splash",
++          "type": "string"
++        },
++        {
++          "name": "menu",
++          "type": "boolean"
++        },
++        {
++          "name": "once",
++          "type": "string"
++        },
++        {
++          "name": "order",
++          "type": "string"
++        }
++      ],
++      "option": "boot-opts"
++    },
++    {
++      "parameters": [
++        {
++          "name": "maxcpus",
++          "type": "number"
++        },
++        {
++          "name": "threads",
++          "type": "number"
++        },
++        {
++          "name": "cores",
++          "type": "number"
++        },
++        {
++          "name": "sockets",
++          "type": "number"
++        },
++        {
++          "name": "cpus",
++          "type": "number"
++        }
++      ],
++      "option": "smp-opts"
++    },
++    {
++      "parameters": [
++        {
++          "name": "maxmem",
++          "type": "size"
++        },
++        {
++          "name": "slots",
++          "type": "number"
++        },
++        {
++          "name": "size",
++          "type": "size"
++        }
++      ],
++      "option": "memory"
++    },
++    {
++      "parameters": [
++        {
++          "name": "thread",
++          "help": "Enable/disable multi-threaded TCG",
++          "type": "string"
++        },
++        {
++          "name": "accel",
++          "help": "Select the type of accelerator",
++          "type": "string"
++        }
++      ],
++      "option": "accel"
++    },
++    {
++      "parameters": [
++        {
++          "name": "loadparm",
++          "help": "Up to 8 chars in set of [A-Za-z0-9. ](lower case chars converted to upper case) to pass to machine loader, boot manager, and guest kernel",
++          "type": "string"
++        },
++        {
++          "name": "dea-key-wrap",
++          "help": "enable/disable DEA key wrapping using the CPACF wrapping key",
++          "type": "boolean"
++        },
++        {
++          "name": "aes-key-wrap",
++          "help": "enable/disable AES key wrapping using the CPACF wrapping key",
++          "type": "boolean"
++        },
++        {
++          "name": "suppress-vmdesc",
++          "help": "Set on to disable self-describing migration",
++          "type": "boolean"
++        },
++        {
++          "name": "iommu",
++          "help": "Set on/off to enable/disable Intel IOMMU (VT-d)",
++          "type": "boolean"
++        },
++        {
++          "name": "firmware",
++          "help": "firmware image",
++          "type": "string"
++        },
++        {
++          "name": "usb",
++          "help": "Set on/off to enable/disable usb",
++          "type": "boolean"
++        },
++        {
++          "name": "mem-merge",
++          "help": "enable/disable memory merge support",
++          "type": "boolean"
++        },
++        {
++          "name": "dump-guest-core",
++          "help": "Include guest memory in  a core dump",
++          "type": "boolean"
++        },
++        {
++          "name": "dt_compatible",
++          "help": "Overrides the \"compatible\" property of the dt root node",
++          "type": "string"
++        },
++        {
++          "name": "phandle_start",
++          "help": "The first phandle ID we may generate dynamically",
++          "type": "number"
++        },
++        {
++          "name": "dumpdtb",
++          "help": "Dump current dtb to a file and quit",
++          "type": "string"
++        },
++        {
++          "name": "dtb",
++          "help": "Linux kernel device tree file",
++          "type": "string"
++        },
++        {
++          "name": "append",
++          "help": "Linux kernel command line",
++          "type": "string"
++        },
++        {
++          "name": "initrd",
++          "help": "Linux initial ramdisk file",
++          "type": "string"
++        },
++        {
++          "name": "kernel",
++          "help": "Linux kernel image file",
++          "type": "string"
++        },
++        {
++          "name": "kvm_shadow_mem",
++          "help": "KVM shadow MMU size",
++          "type": "size"
++        },
++        {
++          "name": "kernel_irqchip",
++          "help": "use KVM in-kernel irqchip",
++          "type": "boolean"
++        },
++        {
++          "name": "accel",
++          "help": "accelerator list",
++          "type": "string"
++        },
++        {
++          "name": "type",
++          "help": "emulated machine",
++          "type": "string"
++        }
++      ],
++      "option": "machine"
++    },
++    {
++      "parameters": [
++        {
++          "name": "romfile",
++          "type": "string"
++        },
++        {
++          "name": "bootindex",
++          "type": "number"
++        }
++      ],
++      "option": "option-rom"
++    },
++    {
++      "parameters": [
++        {
++          "name": "file",
++          "type": "string"
++        },
++        {
++          "name": "events",
++          "type": "string"
++        },
++        {
++          "name": "enable",
++          "type": "string"
++        }
++      ],
++      "option": "trace"
++    },
++    {
++      "parameters": [
++        {
++          "name": "x-oob",
++          "type": "boolean"
++        },
++        {
++          "name": "pretty",
++          "type": "boolean"
++        },
++        {
++          "name": "chardev",
++          "type": "string"
++        },
++        {
++          "name": "mode",
++          "type": "string"
++        }
++      ],
++      "option": "mon"
++    },
++    {
++      "parameters": [
++        {
++          "name": "value",
++          "type": "string"
++        },
++        {
++          "name": "property",
++          "type": "string"
++        },
++        {
++          "name": "driver",
++          "type": "string"
++        }
++      ],
++      "option": "global"
++    },
++    {
++      "parameters": [
++        {
++          "name": "driftfix",
++          "type": "string"
++        },
++        {
++          "name": "clock",
++          "type": "string"
++        },
++        {
++          "name": "base",
++          "type": "string"
++        }
++      ],
++      "option": "rtc"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "net"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "nic"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "netdev"
++    },
++    {
++      "parameters": [
++      ],
++      "option": "device"
++    },
++    {
++      "parameters": [
++        {
++          "name": "logappend",
++          "type": "boolean"
++        },
++        {
++          "name": "logfile",
++          "type": "string"
++        },
++        {
++          "name": "append",
++          "type": "boolean"
++        },
++        {
++          "name": "chardev",
++          "type": "string"
++        },
++        {
++          "name": "size",
++          "type": "size"
++        },
++        {
++          "name": "debug",
++          "type": "number"
++        },
++        {
++          "name": "name",
++          "type": "string"
++        },
++        {
++          "name": "signal",
++          "type": "boolean"
++        },
++        {
++          "name": "mux",
++          "type": "boolean"
++        },
++        {
++          "name": "rows",
++          "type": "number"
++        },
++        {
++          "name": "cols",
++          "type": "number"
++        },
++        {
++          "name": "height",
++          "type": "number"
++        },
++        {
++          "name": "width",
++          "type": "number"
++        },
++        {
++          "name": "tls-creds",
++          "type": "string"
++        },
++        {
++          "name": "tn3270",
++          "type": "boolean"
++        },
++        {
++          "name": "telnet",
++          "type": "boolean"
++        },
++        {
++          "name": "reconnect",
++          "type": "number"
++        },
++        {
++          "name": "delay",
++          "type": "boolean"
++        },
++        {
++          "name": "server",
++          "type": "boolean"
++        },
++        {
++          "name": "wait",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv6",
++          "type": "boolean"
++        },
++        {
++          "name": "ipv4",
++          "type": "boolean"
++        },
++        {
++          "name": "to",
++          "type": "number"
++        },
++        {
++          "name": "localport",
++          "type": "string"
++        },
++        {
++          "name": "localaddr",
++          "type": "string"
++        },
++        {
++          "name": "fd",
++          "type": "string"
++        },
++        {
++          "name": "port",
++          "type": "string"
++        },
++        {
++          "name": "host",
++          "type": "string"
++        },
++        {
++          "name": "path",
++          "type": "string"
++        },
++        {
++          "name": "backend",
++          "type": "string"
++        }
++      ],
++      "option": "chardev"
++    },
++    {
++      "parameters": [
++        {
++          "name": "copy-on-read",
++          "help": "copy read data from backing file into image file",
++          "type": "boolean"
++        },
++        {
++          "name": "werror",
++          "help": "write error action",
++          "type": "string"
++        },
++        {
++          "name": "rerror",
++          "help": "read error action",
++          "type": "string"
++        },
++        {
++          "name": "read-only",
++          "help": "open drive file as read-only",
++          "type": "boolean"
++        },
++        {
++          "name": "file",
++          "help": "file name",
++          "type": "string"
++        },
++        {
++          "name": "if",
++          "help": "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
++          "type": "string"
++        },
++        {
++          "name": "media",
++          "help": "media type (disk, cdrom)",
++          "type": "string"
++        },
++        {
++          "name": "index",
++          "help": "index number",
++          "type": "number"
++        },
++        {
++          "name": "unit",
++          "help": "unit number (i.e. lun for scsi)",
++          "type": "number"
++        },
++        {
++          "name": "bus",
++          "help": "bus number",
++          "type": "number"
++        },
++        {
++          "name": "stats-account-failed",
++          "help": "whether to account for failed I/O operations in the statistics",
++          "type": "boolean"
++        },
++        {
++          "name": "stats-account-invalid",
++          "help": "whether to account for invalid I/O operations in the statistics",
++          "type": "boolean"
++        },
++        {
++          "name": "detect-zeroes",
++          "help": "try to optimize zero writes (off, on, unmap)",
++          "type": "string"
++        },
++        {
++          "name": "throttling.group",
++          "help": "name of the block throttling group",
++          "type": "string"
++        },
++        {
++          "name": "throttling.iops-size",
++          "help": "when limiting by iops max size of an I/O in bytes",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max-length",
++          "help": "length of the bps-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max-length",
++          "help": "length of the bps-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max-length",
++          "help": "length of the bps-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max-length",
++          "help": "length of the iops-write-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max-length",
++          "help": "length of the iops-read-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max-length",
++          "help": "length of the iops-total-max burst period, in seconds",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write-max",
++          "help": "total bytes write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read-max",
++          "help": "total bytes read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total-max",
++          "help": "total bytes burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write-max",
++          "help": "I/O operations write burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read-max",
++          "help": "I/O operations read burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total-max",
++          "help": "I/O operations burst",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-write",
++          "help": "limit write bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-read",
++          "help": "limit read bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.bps-total",
++          "help": "limit total bytes per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-write",
++          "help": "limit write operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-read",
++          "help": "limit read operations per second",
++          "type": "number"
++        },
++        {
++          "name": "throttling.iops-total",
++          "help": "limit total I/O operations per second",
++          "type": "number"
++        },
++        {
++          "name": "werror",
++          "help": "write error action",
++          "type": "string"
++        },
++        {
++          "name": "format",
++          "help": "disk format (raw, qcow2, ...)",
++          "type": "string"
++        },
++        {
++          "name": "cache.writeback",
++          "help": "Enable writeback mode",
++          "type": "boolean"
++        },
++        {
++          "name": "aio",
++          "help": "host AIO implementation (threads, native)",
++          "type": "string"
++        },
++        {
++          "name": "snapshot",
++          "help": "enable/disable snapshot mode",
++          "type": "boolean"
++        },
++        {
++          "name": "force-share",
++          "help": "always accept other writers (default: off)",
++          "type": "boolean"
++        },
++        {
++          "name": "discard",
++          "help": "discard operation (ignore/off, unmap/on)",
++          "type": "string"
++        },
++        {
++          "name": "read-only",
++          "help": "Node is opened in read-only mode",
++          "type": "boolean"
++        },
++        {
++          "name": "cache.no-flush",
++          "help": "Ignore flush requests",
++          "type": "boolean"
++        },
++        {
++          "name": "cache.direct",
++          "help": "Bypass software writeback cache on the host",
++          "type": "boolean"
++        },
++        {
++          "name": "driver",
++          "help": "Block driver to use for the node",
++          "type": "string"
++        },
++        {
++          "name": "node-name",
++          "help": "Node name of the block device node",
++          "type": "string"
++        }
++      ],
++      "option": "drive"
++    }
++  ],
++  "id": "libvirt-47"
++}
++
++{
++  "execute": "query-migrate-capabilities",
++  "id": "libvirt-48"
++}
++
++{
++  "return": [
++    {
++      "state": false,
++      "capability": "xbzrle"
++    },
++    {
++      "state": false,
++      "capability": "rdma-pin-all"
++    },
++    {
++      "state": false,
++      "capability": "auto-converge"
++    },
++    {
++      "state": false,
++      "capability": "zero-blocks"
++    },
++    {
++      "state": false,
++      "capability": "compress"
++    },
++    {
++      "state": false,
++      "capability": "events"
++    },
++    {
++      "state": false,
++      "capability": "postcopy-ram"
++    },
++    {
++      "state": false,
++      "capability": "x-colo"
++    },
++    {
++      "state": false,
++      "capability": "release-ram"
++    },
++    {
++      "state": false,
++      "capability": "block"
++    },
++    {
++      "state": false,
++      "capability": "return-path"
++    },
++    {
++      "state": false,
++      "capability": "pause-before-switchover"
++    },
++    {
++      "state": false,
++      "capability": "x-multifd"
++    },
++    {
++      "state": false,
++      "capability": "dirty-bitmaps"
++    },
++    {
++      "state": false,
++      "capability": "postcopy-blocktime"
++    },
++    {
++      "state": false,
++      "capability": "late-block-activate"
++    }
++  ],
++  "id": "libvirt-48"
++}
++
++{
++  "execute": "query-qmp-schema",
++  "id": "libvirt-49"
++}
++
++{
++  "return": [
++    {
++      "name": "query-status",
++      "ret-type": "1",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "SHUTDOWN",
++      "meta-type": "event",
++      "arg-type": "2"
++    },
++    {
++      "name": "POWERDOWN",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "RESET",
++      "meta-type": "event",
++      "arg-type": "3"
++    },
++    {
++      "name": "STOP",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "RESUME",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "SUSPEND",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "SUSPEND_DISK",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "WAKEUP",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "WATCHDOG",
++      "meta-type": "event",
++      "arg-type": "4"
++    },
++    {
++      "name": "watchdog-set-action",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "5"
++    },
++    {
++      "name": "GUEST_PANICKED",
++      "meta-type": "event",
++      "arg-type": "6"
++    },
++    {
++      "name": "JOB_STATUS_CHANGE",
++      "meta-type": "event",
++      "arg-type": "7"
++    },
++    {
++      "name": "job-pause",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "8"
++    },
++    {
++      "name": "job-resume",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "9"
++    },
++    {
++      "name": "job-cancel",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "10"
++    },
++    {
++      "name": "job-complete",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "11"
++    },
++    {
++      "name": "job-dismiss",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "12"
++    },
++    {
++      "name": "job-finalize",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "13"
++    },
++    {
++      "name": "query-jobs",
++      "ret-type": "[14]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "x-block-latency-histogram-set",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "15"
++    },
++    {
++      "name": "query-block",
++      "ret-type": "[16]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-blockstats",
++      "ret-type": "[18]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "17"
++    },
++    {
++      "name": "query-block-jobs",
++      "ret-type": "[19]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "block_passwd",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "20"
++    },
++    {
++      "name": "block_resize",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "21"
++    },
++    {
++      "name": "blockdev-snapshot-sync",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "22"
++    },
++    {
++      "name": "blockdev-snapshot",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "23"
++    },
++    {
++      "name": "change-backing-file",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "24"
++    },
++    {
++      "name": "block-commit",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "25"
++    },
++    {
++      "name": "drive-backup",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "26"
++    },
++    {
++      "name": "blockdev-backup",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "27"
++    },
++    {
++      "name": "query-named-block-nodes",
++      "ret-type": "[28]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "drive-mirror",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "29"
++    },
++    {
++      "name": "block-dirty-bitmap-add",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "30"
++    },
++    {
++      "name": "block-dirty-bitmap-remove",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "block-dirty-bitmap-clear",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "x-block-dirty-bitmap-enable",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "x-block-dirty-bitmap-disable",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "x-block-dirty-bitmap-merge",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "32"
++    },
++    {
++      "name": "x-debug-block-dirty-bitmap-sha256",
++      "ret-type": "33",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "31"
++    },
++    {
++      "name": "blockdev-mirror",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "34"
++    },
++    {
++      "name": "block_set_io_throttle",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "35"
++    },
++    {
++      "name": "block-stream",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "36"
++    },
++    {
++      "name": "block-job-set-speed",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "37"
++    },
++    {
++      "name": "block-job-cancel",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "38"
++    },
++    {
++      "name": "block-job-pause",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "39"
++    },
++    {
++      "name": "block-job-resume",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "40"
++    },
++    {
++      "name": "block-job-complete",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "41"
++    },
++    {
++      "name": "block-job-dismiss",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "42"
++    },
++    {
++      "name": "block-job-finalize",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "43"
++    },
++    {
++      "name": "blockdev-add",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "44"
++    },
++    {
++      "name": "blockdev-del",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "45"
++    },
++    {
++      "name": "blockdev-create",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "46"
++    },
++    {
++      "name": "blockdev-open-tray",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "47"
++    },
++    {
++      "name": "blockdev-close-tray",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "48"
++    },
++    {
++      "name": "blockdev-remove-medium",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "49"
++    },
++    {
++      "name": "blockdev-insert-medium",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "50"
++    },
++    {
++      "name": "blockdev-change-medium",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "51"
++    },
++    {
++      "name": "BLOCK_IMAGE_CORRUPTED",
++      "meta-type": "event",
++      "arg-type": "52"
++    },
++    {
++      "name": "BLOCK_IO_ERROR",
++      "meta-type": "event",
++      "arg-type": "53"
++    },
++    {
++      "name": "BLOCK_JOB_COMPLETED",
++      "meta-type": "event",
++      "arg-type": "54"
++    },
++    {
++      "name": "BLOCK_JOB_CANCELLED",
++      "meta-type": "event",
++      "arg-type": "55"
++    },
++    {
++      "name": "BLOCK_JOB_ERROR",
++      "meta-type": "event",
++      "arg-type": "56"
++    },
++    {
++      "name": "BLOCK_JOB_READY",
++      "meta-type": "event",
++      "arg-type": "57"
++    },
++    {
++      "name": "BLOCK_JOB_PENDING",
++      "meta-type": "event",
++      "arg-type": "58"
++    },
++    {
++      "name": "BLOCK_WRITE_THRESHOLD",
++      "meta-type": "event",
++      "arg-type": "59"
++    },
++    {
++      "name": "block-set-write-threshold",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "60"
++    },
++    {
++      "name": "x-blockdev-change",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "61"
++    },
++    {
++      "name": "x-blockdev-set-iothread",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "62"
++    },
++    {
++      "name": "query-pr-managers",
++      "ret-type": "[63]",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "blockdev-snapshot-internal-sync",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "64"
++    },
++    {
++      "name": "blockdev-snapshot-delete-internal-sync",
++      "ret-type": "66",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "65"
++    },
++    {
++      "name": "eject",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "67"
++    },
++    {
++      "name": "nbd-server-start",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "68"
++    },
++    {
++      "name": "nbd-server-add",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "69"
++    },
++    {
++      "name": "nbd-server-remove",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "70"
++    },
++    {
++      "name": "x-nbd-server-add-bitmap",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "71"
++    },
++    {
++      "name": "nbd-server-stop",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "DEVICE_TRAY_MOVED",
++      "meta-type": "event",
++      "arg-type": "72"
++    },
++    {
++      "name": "PR_MANAGER_STATUS_CHANGED",
++      "meta-type": "event",
++      "arg-type": "73"
++    },
++    {
++      "name": "QUORUM_FAILURE",
++      "meta-type": "event",
++      "arg-type": "74"
++    },
++    {
++      "name": "QUORUM_REPORT_BAD",
++      "meta-type": "event",
++      "arg-type": "75"
++    },
++    {
++      "name": "query-chardev",
++      "ret-type": "[76]",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-chardev-backends",
++      "ret-type": "[77]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "ringbuf-write",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "78"
++    },
++    {
++      "name": "ringbuf-read",
++      "ret-type": "str",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "79"
++    },
++    {
++      "name": "chardev-add",
++      "ret-type": "81",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "80"
++    },
++    {
++      "name": "chardev-change",
++      "ret-type": "81",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "82"
++    },
++    {
++      "name": "chardev-remove",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "83"
++    },
++    {
++      "name": "chardev-send-break",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "84"
++    },
++    {
++      "name": "VSERPORT_CHANGE",
++      "meta-type": "event",
++      "arg-type": "85"
++    },
++    {
++      "name": "set_link",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "86"
++    },
++    {
++      "name": "netdev_add",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "87"
++    },
++    {
++      "name": "netdev_del",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "88"
++    },
++    {
++      "name": "query-rx-filter",
++      "ret-type": "[90]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "89"
++    },
++    {
++      "name": "NIC_RX_FILTER_CHANGED",
++      "meta-type": "event",
++      "arg-type": "91"
++    },
++    {
++      "name": "query-rocker",
++      "ret-type": "93",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "92"
++    },
++    {
++      "name": "query-rocker-ports",
++      "ret-type": "[95]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "94"
++    },
++    {
++      "name": "query-rocker-of-dpa-flows",
++      "ret-type": "[97]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "96"
++    },
++    {
++      "name": "query-rocker-of-dpa-groups",
++      "ret-type": "[99]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "98"
++    },
++    {
++      "name": "query-tpm-models",
++      "ret-type": "[100]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-tpm-types",
++      "ret-type": "[101]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-tpm",
++      "ret-type": "[102]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "set_password",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "103"
++    },
++    {
++      "name": "expire_password",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "104"
++    },
++    {
++      "name": "screendump",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "105"
++    },
++    {
++      "name": "query-spice",
++      "ret-type": "106",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "SPICE_CONNECTED",
++      "meta-type": "event",
++      "arg-type": "107"
++    },
++    {
++      "name": "SPICE_INITIALIZED",
++      "meta-type": "event",
++      "arg-type": "108"
++    },
++    {
++      "name": "SPICE_DISCONNECTED",
++      "meta-type": "event",
++      "arg-type": "109"
++    },
++    {
++      "name": "SPICE_MIGRATE_COMPLETED",
++      "meta-type": "event",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-vnc",
++      "ret-type": "110",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-vnc-servers",
++      "ret-type": "[111]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "change-vnc-password",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "112"
++    },
++    {
++      "name": "VNC_CONNECTED",
++      "meta-type": "event",
++      "arg-type": "113"
++    },
++    {
++      "name": "VNC_INITIALIZED",
++      "meta-type": "event",
++      "arg-type": "114"
++    },
++    {
++      "name": "VNC_DISCONNECTED",
++      "meta-type": "event",
++      "arg-type": "115"
++    },
++    {
++      "name": "query-mice",
++      "ret-type": "[116]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "send-key",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "117"
++    },
++    {
++      "name": "input-send-event",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "118"
++    },
++    {
++      "name": "query-migrate",
++      "ret-type": "119",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate-set-capabilities",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "120"
++    },
++    {
++      "name": "query-migrate-capabilities",
++      "ret-type": "[121]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate-set-parameters",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "122"
++    },
++    {
++      "name": "query-migrate-parameters",
++      "ret-type": "123",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "client_migrate_info",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "124"
++    },
++    {
++      "name": "migrate-start-postcopy",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "MIGRATION",
++      "meta-type": "event",
++      "arg-type": "125"
++    },
++    {
++      "name": "MIGRATION_PASS",
++      "meta-type": "event",
++      "arg-type": "126"
++    },
++    {
++      "name": "x-colo-lost-heartbeat",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate_cancel",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate-continue",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "127"
++    },
++    {
++      "name": "migrate_set_downtime",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "128"
++    },
++    {
++      "name": "migrate_set_speed",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "129"
++    },
++    {
++      "name": "migrate-set-cache-size",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "130"
++    },
++    {
++      "name": "query-migrate-cache-size",
++      "ret-type": "int",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "131"
++    },
++    {
++      "name": "migrate-incoming",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "132"
++    },
++    {
++      "name": "xen-save-devices-state",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "133"
++    },
++    {
++      "name": "xen-set-replication",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "134"
++    },
++    {
++      "name": "query-xen-replication-status",
++      "ret-type": "135",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "xen-colo-do-checkpoint",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "migrate-recover",
++      "ret-type": "0",
++      "allow-oob": true,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "136"
++    },
++    {
++      "name": "migrate-pause",
++      "ret-type": "0",
++      "allow-oob": true,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "transaction",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "137"
++    },
++    {
++      "name": "trace-event-get-state",
++      "ret-type": "[139]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "138"
++    },
++    {
++      "name": "trace-event-set-state",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "140"
++    },
++    {
++      "name": "query-qmp-schema",
++      "ret-type": "[141]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "qmp_capabilities",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "142"
++    },
++    {
++      "name": "query-version",
++      "ret-type": "143",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-commands",
++      "ret-type": "[144]",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "add_client",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "145"
++    },
++    {
++      "name": "query-name",
++      "ret-type": "146",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-kvm",
++      "ret-type": "147",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-uuid",
++      "ret-type": "148",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-events",
++      "ret-type": "[149]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-cpus",
++      "ret-type": "[150]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-cpus-fast",
++      "ret-type": "[151]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-iothreads",
++      "ret-type": "[152]",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-balloon",
++      "ret-type": "153",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "BALLOON_CHANGE",
++      "meta-type": "event",
++      "arg-type": "154"
++    },
++    {
++      "name": "query-pci",
++      "ret-type": "[155]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "quit",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "stop",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "system_reset",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "system_powerdown",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "cpu-add",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "156"
++    },
++    {
++      "name": "memsave",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "157"
++    },
++    {
++      "name": "pmemsave",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "158"
++    },
++    {
++      "name": "cont",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "exit-preconfig",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "system_wakeup",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "inject-nmi",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "balloon",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "159"
++    },
++    {
++      "name": "human-monitor-command",
++      "ret-type": "str",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "160"
++    },
++    {
++      "name": "qom-list",
++      "ret-type": "[162]",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "161"
++    },
++    {
++      "name": "qom-get",
++      "ret-type": "any",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "163"
++    },
++    {
++      "name": "qom-set",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "164"
++    },
++    {
++      "name": "change",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "165"
++    },
++    {
++      "name": "qom-list-types",
++      "ret-type": "[167]",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "166"
++    },
++    {
++      "name": "device-list-properties",
++      "ret-type": "[162]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "168"
++    },
++    {
++      "name": "qom-list-properties",
++      "ret-type": "[162]",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "169"
++    },
++    {
++      "name": "xen-set-global-dirty-log",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "170"
++    },
++    {
++      "name": "device_add",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "171"
++    },
++    {
++      "name": "device_del",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "172"
++    },
++    {
++      "name": "DEVICE_DELETED",
++      "meta-type": "event",
++      "arg-type": "173"
++    },
++    {
++      "name": "dump-guest-memory",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "174"
++    },
++    {
++      "name": "query-dump",
++      "ret-type": "175",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "DUMP_COMPLETED",
++      "meta-type": "event",
++      "arg-type": "176"
++    },
++    {
++      "name": "query-dump-guest-memory-capability",
++      "ret-type": "177",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "dump-skeys",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "178"
++    },
++    {
++      "name": "object-add",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "179"
++    },
++    {
++      "name": "object-del",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "180"
++    },
++    {
++      "name": "getfd",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "181"
++    },
++    {
++      "name": "closefd",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "182"
++    },
++    {
++      "name": "query-machines",
++      "ret-type": "[183]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-memory-size-summary",
++      "ret-type": "184",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-cpu-definitions",
++      "ret-type": "[185]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-cpu-model-expansion",
++      "ret-type": "187",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "186"
++    },
++    {
++      "name": "query-cpu-model-comparison",
++      "ret-type": "189",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "188"
++    },
++    {
++      "name": "query-cpu-model-baseline",
++      "ret-type": "191",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "190"
++    },
++    {
++      "name": "add-fd",
++      "ret-type": "193",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "192"
++    },
++    {
++      "name": "remove-fd",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "194"
++    },
++    {
++      "name": "query-fdsets",
++      "ret-type": "[195]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-target",
++      "ret-type": "196",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-command-line-options",
++      "ret-type": "[198]",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "197"
++    },
++    {
++      "name": "query-memdev",
++      "ret-type": "[199]",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-memory-devices",
++      "ret-type": "[200]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "MEM_UNPLUG_ERROR",
++      "meta-type": "event",
++      "arg-type": "201"
++    },
++    {
++      "name": "query-acpi-ospm-status",
++      "ret-type": "[202]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "ACPI_DEVICE_OST",
++      "meta-type": "event",
++      "arg-type": "203"
++    },
++    {
++      "name": "rtc-reset-reinjection",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "RTC_CHANGE",
++      "meta-type": "event",
++      "arg-type": "204"
++    },
++    {
++      "name": "xen-load-devices-state",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "205"
++    },
++    {
++      "name": "query-gic-capabilities",
++      "ret-type": "[206]",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-hotpluggable-cpus",
++      "ret-type": "[207]",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-vm-generation-id",
++      "ret-type": "208",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-sev",
++      "ret-type": "209",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-sev-launch-measure",
++      "ret-type": "210",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "query-sev-capabilities",
++      "ret-type": "211",
++      "allow-oob": false,
++      "allow-preconfig": false,
++      "meta-type": "command",
++      "arg-type": "0"
++    },
++    {
++      "name": "COMMAND_DROPPED",
++      "meta-type": "event",
++      "arg-type": "212"
++    },
++    {
++      "name": "set-numa-node",
++      "ret-type": "0",
++      "allow-oob": false,
++      "allow-preconfig": true,
++      "meta-type": "command",
++      "arg-type": "213"
++    },
++    {
++      "name": "0",
++      "members": [
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "1",
++      "members": [
++        {
++          "name": "running",
++          "type": "bool"
++        },
++        {
++          "name": "singlestep",
++          "type": "bool"
++        },
++        {
++          "name": "status",
++          "type": "214"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "2",
++      "members": [
++        {
++          "name": "guest",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "3",
++      "members": [
++        {
++          "name": "guest",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "4",
++      "members": [
++        {
++          "name": "action",
++          "type": "215"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "5",
++      "members": [
++        {
++          "name": "action",
++          "type": "215"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "6",
++      "members": [
++        {
++          "name": "action",
++          "type": "216"
++        },
++        {
++          "name": "info",
++          "default": null,
++          "type": "217"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "7",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "status",
++          "type": "218"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "8",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "9",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "10",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "11",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "12",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "13",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[14]",
++      "element-type": "14",
++      "meta-type": "array"
++    },
++    {
++      "name": "14",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "219"
++        },
++        {
++          "name": "status",
++          "type": "218"
++        },
++        {
++          "name": "current-progress",
++          "type": "int"
++        },
++        {
++          "name": "total-progress",
++          "type": "int"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "15",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "boundaries",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "boundaries-read",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "boundaries-write",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "boundaries-flush",
++          "default": null,
++          "type": "[int]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[16]",
++      "element-type": "16",
++      "meta-type": "array"
++    },
++    {
++      "name": "16",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "qdev",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "removable",
++          "type": "bool"
++        },
++        {
++          "name": "locked",
++          "type": "bool"
++        },
++        {
++          "name": "inserted",
++          "default": null,
++          "type": "28"
++        },
++        {
++          "name": "tray_open",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "io-status",
++          "default": null,
++          "type": "220"
++        },
++        {
++          "name": "dirty-bitmaps",
++          "default": null,
++          "type": "[221]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "17",
++      "members": [
++        {
++          "name": "query-nodes",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[18]",
++      "element-type": "18",
++      "meta-type": "array"
++    },
++    {
++      "name": "18",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "stats",
++          "type": "222"
++        },
++        {
++          "name": "parent",
++          "default": null,
++          "type": "18"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "18"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[19]",
++      "element-type": "19",
++      "meta-type": "array"
++    },
++    {
++      "name": "19",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "busy",
++          "type": "bool"
++        },
++        {
++          "name": "paused",
++          "type": "bool"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        },
++        {
++          "name": "io-status",
++          "type": "220"
++        },
++        {
++          "name": "ready",
++          "type": "bool"
++        },
++        {
++          "name": "status",
++          "type": "218"
++        },
++        {
++          "name": "auto-finalize",
++          "type": "bool"
++        },
++        {
++          "name": "auto-dismiss",
++          "type": "bool"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "20",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "21",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "22",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "snapshot-file",
++          "type": "str"
++        },
++        {
++          "name": "snapshot-node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "223"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "23",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "overlay",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "24",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "image-node-name",
++          "type": "str"
++        },
++        {
++          "name": "backing-file",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "25",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "base",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "top",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "filter-node-name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "26",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "224"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "223"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bitmap",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "compress",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "225"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "225"
++        },
++        {
++          "name": "auto-finalize",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "auto-dismiss",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "27",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "224"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "compress",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "225"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "225"
++        },
++        {
++          "name": "auto-finalize",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "auto-dismiss",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[28]",
++      "element-type": "28",
++      "meta-type": "array"
++    },
++    {
++      "name": "28",
++      "members": [
++        {
++          "name": "file",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ro",
++          "type": "bool"
++        },
++        {
++          "name": "drv",
++          "type": "str"
++        },
++        {
++          "name": "backing_file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing_file_depth",
++          "type": "int"
++        },
++        {
++          "name": "encrypted",
++          "type": "bool"
++        },
++        {
++          "name": "encryption_key_missing",
++          "type": "bool"
++        },
++        {
++          "name": "detect_zeroes",
++          "type": "226"
++        },
++        {
++          "name": "bps",
++          "type": "int"
++        },
++        {
++          "name": "bps_rd",
++          "type": "int"
++        },
++        {
++          "name": "bps_wr",
++          "type": "int"
++        },
++        {
++          "name": "iops",
++          "type": "int"
++        },
++        {
++          "name": "iops_rd",
++          "type": "int"
++        },
++        {
++          "name": "iops_wr",
++          "type": "int"
++        },
++        {
++          "name": "image",
++          "type": "227"
++        },
++        {
++          "name": "bps_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cache",
++          "type": "228"
++        },
++        {
++          "name": "write_threshold",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "29",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "replaces",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "224"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "223"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "granularity",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "buf-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "225"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "225"
++        },
++        {
++          "name": "unmap",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "copy-mode",
++          "default": null,
++          "type": "229"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "30",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "granularity",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "persistent",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "autoload",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "x-disabled",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "31",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "32",
++      "members": [
++        {
++          "name": "node",
++          "type": "str"
++        },
++        {
++          "name": "dst_name",
++          "type": "str"
++        },
++        {
++          "name": "src_name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "33",
++      "members": [
++        {
++          "name": "sha256",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "34",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "replaces",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sync",
++          "type": "224"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "granularity",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "buf-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "on-source-error",
++          "default": null,
++          "type": "225"
++        },
++        {
++          "name": "on-target-error",
++          "default": null,
++          "type": "225"
++        },
++        {
++          "name": "filter-node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "copy-mode",
++          "default": null,
++          "type": "229"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "35",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "bps",
++          "type": "int"
++        },
++        {
++          "name": "bps_rd",
++          "type": "int"
++        },
++        {
++          "name": "bps_wr",
++          "type": "int"
++        },
++        {
++          "name": "iops",
++          "type": "int"
++        },
++        {
++          "name": "iops_rd",
++          "type": "int"
++        },
++        {
++          "name": "iops_wr",
++          "type": "int"
++        },
++        {
++          "name": "bps_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "bps_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_rd_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_wr_max_length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "iops_size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "36",
++      "members": [
++        {
++          "name": "job-id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "base",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "base-node",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "speed",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "on-error",
++          "default": null,
++          "type": "225"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "37",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "38",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "39",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "40",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "41",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "42",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "43",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "44",
++      "tag": "driver",
++      "variants": [
++        {
++          "case": "blkdebug",
++          "type": "233"
++        },
++        {
++          "case": "blklogwrites",
++          "type": "234"
++        },
++        {
++          "case": "blkverify",
++          "type": "235"
++        },
++        {
++          "case": "bochs",
++          "type": "236"
++        },
++        {
++          "case": "cloop",
++          "type": "236"
++        },
++        {
++          "case": "copy-on-read",
++          "type": "236"
++        },
++        {
++          "case": "dmg",
++          "type": "236"
++        },
++        {
++          "case": "file",
++          "type": "237"
++        },
++        {
++          "case": "ftp",
++          "type": "238"
++        },
++        {
++          "case": "ftps",
++          "type": "239"
++        },
++        {
++          "case": "gluster",
++          "type": "240"
++        },
++        {
++          "case": "host_cdrom",
++          "type": "237"
++        },
++        {
++          "case": "host_device",
++          "type": "237"
++        },
++        {
++          "case": "http",
++          "type": "241"
++        },
++        {
++          "case": "https",
++          "type": "242"
++        },
++        {
++          "case": "iscsi",
++          "type": "243"
++        },
++        {
++          "case": "luks",
++          "type": "244"
++        },
++        {
++          "case": "nbd",
++          "type": "245"
++        },
++        {
++          "case": "nfs",
++          "type": "246"
++        },
++        {
++          "case": "null-aio",
++          "type": "247"
++        },
++        {
++          "case": "null-co",
++          "type": "247"
++        },
++        {
++          "case": "nvme",
++          "type": "248"
++        },
++        {
++          "case": "parallels",
++          "type": "236"
++        },
++        {
++          "case": "qcow2",
++          "type": "249"
++        },
++        {
++          "case": "qcow",
++          "type": "250"
++        },
++        {
++          "case": "qed",
++          "type": "251"
++        },
++        {
++          "case": "quorum",
++          "type": "252"
++        },
++        {
++          "case": "raw",
++          "type": "253"
++        },
++        {
++          "case": "rbd",
++          "type": "254"
++        },
++        {
++          "case": "replication",
++          "type": "255"
++        },
++        {
++          "case": "sheepdog",
++          "type": "256"
++        },
++        {
++          "case": "ssh",
++          "type": "257"
++        },
++        {
++          "case": "throttle",
++          "type": "258"
++        },
++        {
++          "case": "vdi",
++          "type": "236"
++        },
++        {
++          "case": "vhdx",
++          "type": "236"
++        },
++        {
++          "case": "vmdk",
++          "type": "251"
++        },
++        {
++          "case": "vpc",
++          "type": "236"
++        },
++        {
++          "case": "vvfat",
++          "type": "259"
++        },
++        {
++          "case": "vxhs",
++          "type": "260"
++        }
++      ],
++      "members": [
++        {
++          "name": "driver",
++          "type": "230"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "discard",
++          "default": null,
++          "type": "231"
++        },
++        {
++          "name": "cache",
++          "default": null,
++          "type": "232"
++        },
++        {
++          "name": "read-only",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "force-share",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "detect-zeroes",
++          "default": null,
++          "type": "226"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "45",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "46",
++      "members": [
++        {
++          "name": "job-id",
++          "type": "str"
++        },
++        {
++          "name": "options",
++          "type": "261"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "47",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "48",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "49",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "50",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "51",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "read-only-mode",
++          "default": null,
++          "type": "262"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "52",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "msg",
++          "type": "str"
++        },
++        {
++          "name": "offset",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "fatal",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "53",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "operation",
++          "type": "263"
++        },
++        {
++          "name": "action",
++          "type": "264"
++        },
++        {
++          "name": "nospace",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "reason",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "54",
++      "members": [
++        {
++          "name": "type",
++          "type": "219"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "55",
++      "members": [
++        {
++          "name": "type",
++          "type": "219"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "56",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "operation",
++          "type": "263"
++        },
++        {
++          "name": "action",
++          "type": "264"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "57",
++      "members": [
++        {
++          "name": "type",
++          "type": "219"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "len",
++          "type": "int"
++        },
++        {
++          "name": "offset",
++          "type": "int"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "58",
++      "members": [
++        {
++          "name": "type",
++          "type": "219"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "59",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "amount-exceeded",
++          "type": "int"
++        },
++        {
++          "name": "write-threshold",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "60",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "write-threshold",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "61",
++      "members": [
++        {
++          "name": "parent",
++          "type": "str"
++        },
++        {
++          "name": "child",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "62",
++      "members": [
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "iothread",
++          "type": "265"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[63]",
++      "element-type": "63",
++      "meta-type": "array"
++    },
++    {
++      "name": "63",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "connected",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "64",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "65",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "66",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "vm-state-size",
++          "type": "int"
++        },
++        {
++          "name": "date-sec",
++          "type": "int"
++        },
++        {
++          "name": "date-nsec",
++          "type": "int"
++        },
++        {
++          "name": "vm-clock-sec",
++          "type": "int"
++        },
++        {
++          "name": "vm-clock-nsec",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "67",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "force",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "68",
++      "members": [
++        {
++          "name": "addr",
++          "type": "266"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "69",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "writable",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "70",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "mode",
++          "default": null,
++          "type": "267"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "71",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "bitmap",
++          "type": "str"
++        },
++        {
++          "name": "bitmap-export-name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "72",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "tray-open",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "73",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "connected",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "74",
++      "members": [
++        {
++          "name": "reference",
++          "type": "str"
++        },
++        {
++          "name": "sector-num",
++          "type": "int"
++        },
++        {
++          "name": "sectors-count",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "75",
++      "members": [
++        {
++          "name": "type",
++          "type": "268"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "node-name",
++          "type": "str"
++        },
++        {
++          "name": "sector-num",
++          "type": "int"
++        },
++        {
++          "name": "sectors-count",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[76]",
++      "element-type": "76",
++      "meta-type": "array"
++    },
++    {
++      "name": "76",
++      "members": [
++        {
++          "name": "label",
++          "type": "str"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "frontend-open",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[77]",
++      "element-type": "77",
++      "meta-type": "array"
++    },
++    {
++      "name": "77",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "78",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "data",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "269"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "79",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "269"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "str",
++      "json-type": "string",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "80",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "backend",
++          "type": "270"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "81",
++      "members": [
++        {
++          "name": "pty",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "82",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "backend",
++          "type": "270"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "83",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "84",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "85",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "open",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "86",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "up",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "87",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "88",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "89",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[90]",
++      "element-type": "90",
++      "meta-type": "array"
++    },
++    {
++      "name": "90",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "promiscuous",
++          "type": "bool"
++        },
++        {
++          "name": "multicast",
++          "type": "271"
++        },
++        {
++          "name": "unicast",
++          "type": "271"
++        },
++        {
++          "name": "vlan",
++          "type": "271"
++        },
++        {
++          "name": "broadcast-allowed",
++          "type": "bool"
++        },
++        {
++          "name": "multicast-overflow",
++          "type": "bool"
++        },
++        {
++          "name": "unicast-overflow",
++          "type": "bool"
++        },
++        {
++          "name": "main-mac",
++          "type": "str"
++        },
++        {
++          "name": "vlan-table",
++          "type": "[int]"
++        },
++        {
++          "name": "unicast-table",
++          "type": "[str]"
++        },
++        {
++          "name": "multicast-table",
++          "type": "[str]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "91",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "92",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "93",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "int"
++        },
++        {
++          "name": "ports",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "94",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[95]",
++      "element-type": "95",
++      "meta-type": "array"
++    },
++    {
++      "name": "95",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "link-up",
++          "type": "bool"
++        },
++        {
++          "name": "speed",
++          "type": "int"
++        },
++        {
++          "name": "duplex",
++          "type": "272"
++        },
++        {
++          "name": "autoneg",
++          "type": "273"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "96",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "tbl-id",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[97]",
++      "element-type": "97",
++      "meta-type": "array"
++    },
++    {
++      "name": "97",
++      "members": [
++        {
++          "name": "cookie",
++          "type": "int"
++        },
++        {
++          "name": "hits",
++          "type": "int"
++        },
++        {
++          "name": "key",
++          "type": "274"
++        },
++        {
++          "name": "mask",
++          "type": "275"
++        },
++        {
++          "name": "action",
++          "type": "276"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "98",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[99]",
++      "element-type": "99",
++      "meta-type": "array"
++    },
++    {
++      "name": "99",
++      "members": [
++        {
++          "name": "id",
++          "type": "int"
++        },
++        {
++          "name": "type",
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "index",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "out-pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "set-vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "pop-vlan",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group-ids",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "set-eth-src",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "set-eth-dst",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ttl-check",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[100]",
++      "element-type": "100",
++      "meta-type": "array"
++    },
++    {
++      "name": "100",
++      "meta-type": "enum",
++      "values": [
++        "tpm-tis",
++        "tpm-crb"
++      ]
++    },
++    {
++      "name": "[101]",
++      "element-type": "101",
++      "meta-type": "array"
++    },
++    {
++      "name": "101",
++      "meta-type": "enum",
++      "values": [
++        "passthrough",
++        "emulator"
++      ]
++    },
++    {
++      "name": "[102]",
++      "element-type": "102",
++      "meta-type": "array"
++    },
++    {
++      "name": "102",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "model",
++          "type": "100"
++        },
++        {
++          "name": "options",
++          "type": "277"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "103",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "password",
++          "type": "str"
++        },
++        {
++          "name": "connected",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "104",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "time",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "105",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "head",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "106",
++      "members": [
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "migrated",
++          "type": "bool"
++        },
++        {
++          "name": "host",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-port",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "auth",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "compiled-version",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "mouse-mode",
++          "type": "278"
++        },
++        {
++          "name": "channels",
++          "default": null,
++          "type": "[279]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "107",
++      "members": [
++        {
++          "name": "server",
++          "type": "280"
++        },
++        {
++          "name": "client",
++          "type": "280"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "108",
++      "members": [
++        {
++          "name": "server",
++          "type": "281"
++        },
++        {
++          "name": "client",
++          "type": "279"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "109",
++      "members": [
++        {
++          "name": "server",
++          "type": "280"
++        },
++        {
++          "name": "client",
++          "type": "280"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "110",
++      "members": [
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "host",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "default": null,
++          "type": "282"
++        },
++        {
++          "name": "service",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "auth",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "clients",
++          "default": null,
++          "type": "[283]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[111]",
++      "element-type": "111",
++      "meta-type": "array"
++    },
++    {
++      "name": "111",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "type": "[284]"
++        },
++        {
++          "name": "clients",
++          "type": "[283]"
++        },
++        {
++          "name": "auth",
++          "type": "285"
++        },
++        {
++          "name": "vencrypt",
++          "default": null,
++          "type": "286"
++        },
++        {
++          "name": "display",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "112",
++      "members": [
++        {
++          "name": "password",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "113",
++      "members": [
++        {
++          "name": "server",
++          "type": "287"
++        },
++        {
++          "name": "client",
++          "type": "288"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "114",
++      "members": [
++        {
++          "name": "server",
++          "type": "287"
++        },
++        {
++          "name": "client",
++          "type": "283"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "115",
++      "members": [
++        {
++          "name": "server",
++          "type": "287"
++        },
++        {
++          "name": "client",
++          "type": "283"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[116]",
++      "element-type": "116",
++      "meta-type": "array"
++    },
++    {
++      "name": "116",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "index",
++          "type": "int"
++        },
++        {
++          "name": "current",
++          "type": "bool"
++        },
++        {
++          "name": "absolute",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "117",
++      "members": [
++        {
++          "name": "keys",
++          "type": "[289]"
++        },
++        {
++          "name": "hold-time",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "118",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "head",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "events",
++          "type": "[290]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "119",
++      "members": [
++        {
++          "name": "status",
++          "default": null,
++          "type": "291"
++        },
++        {
++          "name": "ram",
++          "default": null,
++          "type": "292"
++        },
++        {
++          "name": "disk",
++          "default": null,
++          "type": "292"
++        },
++        {
++          "name": "xbzrle-cache",
++          "default": null,
++          "type": "293"
++        },
++        {
++          "name": "total-time",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "expected-downtime",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "downtime",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "setup-time",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-percentage",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "error-desc",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "postcopy-blocktime",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "postcopy-vcpu-blocktime",
++          "default": null,
++          "type": "[int]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "120",
++      "members": [
++        {
++          "name": "capabilities",
++          "type": "[121]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[121]",
++      "element-type": "121",
++      "meta-type": "array"
++    },
++    {
++      "name": "121",
++      "members": [
++        {
++          "name": "capability",
++          "type": "294"
++        },
++        {
++          "name": "state",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "122",
++      "members": [
++        {
++          "name": "compress-level",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "compress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "decompress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-initial",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-increment",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "265"
++        },
++        {
++          "name": "tls-hostname",
++          "default": null,
++          "type": "265"
++        },
++        {
++          "name": "max-bandwidth",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "downtime-limit",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-checkpoint-delay",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "block-incremental",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "x-multifd-channels",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-multifd-page-count",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "xbzrle-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-postcopy-bandwidth",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "123",
++      "members": [
++        {
++          "name": "compress-level",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "compress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "decompress-threads",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-initial",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpu-throttle-increment",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "tls-hostname",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "max-bandwidth",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "downtime-limit",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-checkpoint-delay",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "block-incremental",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "x-multifd-channels",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "x-multifd-page-count",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "xbzrle-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-postcopy-bandwidth",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "124",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "hostname",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tls-port",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cert-subject",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "125",
++      "members": [
++        {
++          "name": "status",
++          "type": "291"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "126",
++      "members": [
++        {
++          "name": "pass",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "127",
++      "members": [
++        {
++          "name": "state",
++          "type": "291"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "128",
++      "members": [
++        {
++          "name": "value",
++          "type": "number"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "129",
++      "members": [
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "130",
++      "members": [
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "int",
++      "json-type": "int",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "131",
++      "members": [
++        {
++          "name": "uri",
++          "type": "str"
++        },
++        {
++          "name": "blk",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "inc",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "detach",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "resume",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "132",
++      "members": [
++        {
++          "name": "uri",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "133",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "live",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "134",
++      "members": [
++        {
++          "name": "enable",
++          "type": "bool"
++        },
++        {
++          "name": "primary",
++          "type": "bool"
++        },
++        {
++          "name": "failover",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "135",
++      "members": [
++        {
++          "name": "error",
++          "type": "bool"
++        },
++        {
++          "name": "desc",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "136",
++      "members": [
++        {
++          "name": "uri",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "137",
++      "members": [
++        {
++          "name": "actions",
++          "type": "[295]"
++        },
++        {
++          "name": "properties",
++          "default": null,
++          "type": "296"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "138",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "vcpu",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[139]",
++      "element-type": "139",
++      "meta-type": "array"
++    },
++    {
++      "name": "139",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "state",
++          "type": "297"
++        },
++        {
++          "name": "vcpu",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "140",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "enable",
++          "type": "bool"
++        },
++        {
++          "name": "ignore-unavailable",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "vcpu",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[141]",
++      "element-type": "141",
++      "meta-type": "array"
++    },
++    {
++      "name": "141",
++      "tag": "meta-type",
++      "variants": [
++        {
++          "case": "builtin",
++          "type": "299"
++        },
++        {
++          "case": "enum",
++          "type": "300"
++        },
++        {
++          "case": "array",
++          "type": "301"
++        },
++        {
++          "case": "object",
++          "type": "302"
++        },
++        {
++          "case": "alternate",
++          "type": "303"
++        },
++        {
++          "case": "command",
++          "type": "304"
++        },
++        {
++          "case": "event",
++          "type": "305"
++        }
++      ],
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "meta-type",
++          "type": "298"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "142",
++      "members": [
++        {
++          "name": "enable",
++          "default": null,
++          "type": "[306]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "143",
++      "members": [
++        {
++          "name": "qemu",
++          "type": "307"
++        },
++        {
++          "name": "package",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[144]",
++      "element-type": "144",
++      "meta-type": "array"
++    },
++    {
++      "name": "144",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "145",
++      "members": [
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "fdname",
++          "type": "str"
++        },
++        {
++          "name": "skipauth",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "tls",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "146",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "147",
++      "members": [
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "present",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "148",
++      "members": [
++        {
++          "name": "UUID",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[149]",
++      "element-type": "149",
++      "meta-type": "array"
++    },
++    {
++      "name": "149",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[150]",
++      "element-type": "150",
++      "meta-type": "array"
++    },
++    {
++      "name": "150",
++      "tag": "arch",
++      "variants": [
++        {
++          "case": "x86",
++          "type": "310"
++        },
++        {
++          "case": "sparc",
++          "type": "311"
++        },
++        {
++          "case": "ppc",
++          "type": "312"
++        },
++        {
++          "case": "mips",
++          "type": "313"
++        },
++        {
++          "case": "tricore",
++          "type": "314"
++        },
++        {
++          "case": "s390",
++          "type": "315"
++        },
++        {
++          "case": "riscv",
++          "type": "316"
++        },
++        {
++          "case": "other",
++          "type": "0"
++        }
++      ],
++      "members": [
++        {
++          "name": "CPU",
++          "type": "int"
++        },
++        {
++          "name": "current",
++          "type": "bool"
++        },
++        {
++          "name": "halted",
++          "type": "bool"
++        },
++        {
++          "name": "qom_path",
++          "type": "str"
++        },
++        {
++          "name": "thread_id",
++          "type": "int"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "308"
++        },
++        {
++          "name": "arch",
++          "type": "309"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[151]",
++      "element-type": "151",
++      "meta-type": "array"
++    },
++    {
++      "name": "151",
++      "tag": "target",
++      "variants": [
++        {
++          "case": "s390x",
++          "type": "315"
++        },
++        {
++          "case": "aarch64",
++          "type": "0"
++        },
++        {
++          "case": "alpha",
++          "type": "0"
++        },
++        {
++          "case": "arm",
++          "type": "0"
++        },
++        {
++          "case": "cris",
++          "type": "0"
++        },
++        {
++          "case": "hppa",
++          "type": "0"
++        },
++        {
++          "case": "i386",
++          "type": "0"
++        },
++        {
++          "case": "lm32",
++          "type": "0"
++        },
++        {
++          "case": "m68k",
++          "type": "0"
++        },
++        {
++          "case": "microblaze",
++          "type": "0"
++        },
++        {
++          "case": "microblazeel",
++          "type": "0"
++        },
++        {
++          "case": "mips",
++          "type": "0"
++        },
++        {
++          "case": "mips64",
++          "type": "0"
++        },
++        {
++          "case": "mips64el",
++          "type": "0"
++        },
++        {
++          "case": "mipsel",
++          "type": "0"
++        },
++        {
++          "case": "moxie",
++          "type": "0"
++        },
++        {
++          "case": "nios2",
++          "type": "0"
++        },
++        {
++          "case": "or1k",
++          "type": "0"
++        },
++        {
++          "case": "ppc",
++          "type": "0"
++        },
++        {
++          "case": "ppc64",
++          "type": "0"
++        },
++        {
++          "case": "ppcemb",
++          "type": "0"
++        },
++        {
++          "case": "riscv32",
++          "type": "0"
++        },
++        {
++          "case": "riscv64",
++          "type": "0"
++        },
++        {
++          "case": "sh4",
++          "type": "0"
++        },
++        {
++          "case": "sh4eb",
++          "type": "0"
++        },
++        {
++          "case": "sparc",
++          "type": "0"
++        },
++        {
++          "case": "sparc64",
++          "type": "0"
++        },
++        {
++          "case": "tricore",
++          "type": "0"
++        },
++        {
++          "case": "unicore32",
++          "type": "0"
++        },
++        {
++          "case": "x86_64",
++          "type": "0"
++        },
++        {
++          "case": "xtensa",
++          "type": "0"
++        },
++        {
++          "case": "xtensaeb",
++          "type": "0"
++        }
++      ],
++      "members": [
++        {
++          "name": "cpu-index",
++          "type": "int"
++        },
++        {
++          "name": "qom-path",
++          "type": "str"
++        },
++        {
++          "name": "thread-id",
++          "type": "int"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "308"
++        },
++        {
++          "name": "arch",
++          "type": "309"
++        },
++        {
++          "name": "target",
++          "type": "317"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[152]",
++      "element-type": "152",
++      "meta-type": "array"
++    },
++    {
++      "name": "152",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "thread-id",
++          "type": "int"
++        },
++        {
++          "name": "poll-max-ns",
++          "type": "int"
++        },
++        {
++          "name": "poll-grow",
++          "type": "int"
++        },
++        {
++          "name": "poll-shrink",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "153",
++      "members": [
++        {
++          "name": "actual",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "154",
++      "members": [
++        {
++          "name": "actual",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[155]",
++      "element-type": "155",
++      "meta-type": "array"
++    },
++    {
++      "name": "155",
++      "members": [
++        {
++          "name": "bus",
++          "type": "int"
++        },
++        {
++          "name": "devices",
++          "type": "[318]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "156",
++      "members": [
++        {
++          "name": "id",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "157",
++      "members": [
++        {
++          "name": "val",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "cpu-index",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "158",
++      "members": [
++        {
++          "name": "val",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "filename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "159",
++      "members": [
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "160",
++      "members": [
++        {
++          "name": "command-line",
++          "type": "str"
++        },
++        {
++          "name": "cpu-index",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "161",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[162]",
++      "element-type": "162",
++      "meta-type": "array"
++    },
++    {
++      "name": "162",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "description",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "163",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "property",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "any",
++      "json-type": "value",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "164",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "property",
++          "type": "str"
++        },
++        {
++          "name": "value",
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "165",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "arg",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "166",
++      "members": [
++        {
++          "name": "implements",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "abstract",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[167]",
++      "element-type": "167",
++      "meta-type": "array"
++    },
++    {
++      "name": "167",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "abstract",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "parent",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "168",
++      "members": [
++        {
++          "name": "typename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "169",
++      "members": [
++        {
++          "name": "typename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "170",
++      "members": [
++        {
++          "name": "enable",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "171",
++      "members": [
++        {
++          "name": "driver",
++          "type": "str"
++        },
++        {
++          "name": "bus",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "172",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "173",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "174",
++      "members": [
++        {
++          "name": "paging",
++          "type": "bool"
++        },
++        {
++          "name": "protocol",
++          "type": "str"
++        },
++        {
++          "name": "detach",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "begin",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "length",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "format",
++          "default": null,
++          "type": "319"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "175",
++      "members": [
++        {
++          "name": "status",
++          "type": "320"
++        },
++        {
++          "name": "completed",
++          "type": "int"
++        },
++        {
++          "name": "total",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "176",
++      "members": [
++        {
++          "name": "result",
++          "type": "175"
++        },
++        {
++          "name": "error",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "177",
++      "members": [
++        {
++          "name": "formats",
++          "type": "[319]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "178",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "179",
++      "members": [
++        {
++          "name": "qom-type",
++          "type": "str"
++        },
++        {
++          "name": "id",
++          "type": "str"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "180",
++      "members": [
++        {
++          "name": "id",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "181",
++      "members": [
++        {
++          "name": "fdname",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "182",
++      "members": [
++        {
++          "name": "fdname",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[183]",
++      "element-type": "183",
++      "meta-type": "array"
++    },
++    {
++      "name": "183",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "alias",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "is-default",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "cpu-max",
++          "type": "int"
++        },
++        {
++          "name": "hotpluggable-cpus",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "184",
++      "members": [
++        {
++          "name": "base-memory",
++          "type": "int"
++        },
++        {
++          "name": "plugged-memory",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[185]",
++      "element-type": "185",
++      "meta-type": "array"
++    },
++    {
++      "name": "185",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "migration-safe",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "static",
++          "type": "bool"
++        },
++        {
++          "name": "unavailable-features",
++          "default": null,
++          "type": "[str]"
++        },
++        {
++          "name": "typename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "186",
++      "members": [
++        {
++          "name": "type",
++          "type": "321"
++        },
++        {
++          "name": "model",
++          "type": "322"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "187",
++      "members": [
++        {
++          "name": "model",
++          "type": "322"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "188",
++      "members": [
++        {
++          "name": "modela",
++          "type": "322"
++        },
++        {
++          "name": "modelb",
++          "type": "322"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "189",
++      "members": [
++        {
++          "name": "result",
++          "type": "323"
++        },
++        {
++          "name": "responsible-properties",
++          "type": "[str]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "190",
++      "members": [
++        {
++          "name": "modela",
++          "type": "322"
++        },
++        {
++          "name": "modelb",
++          "type": "322"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "191",
++      "members": [
++        {
++          "name": "model",
++          "type": "322"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "192",
++      "members": [
++        {
++          "name": "fdset-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "opaque",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "193",
++      "members": [
++        {
++          "name": "fdset-id",
++          "type": "int"
++        },
++        {
++          "name": "fd",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "194",
++      "members": [
++        {
++          "name": "fdset-id",
++          "type": "int"
++        },
++        {
++          "name": "fd",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[195]",
++      "element-type": "195",
++      "meta-type": "array"
++    },
++    {
++      "name": "195",
++      "members": [
++        {
++          "name": "fdset-id",
++          "type": "int"
++        },
++        {
++          "name": "fds",
++          "type": "[324]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "196",
++      "members": [
++        {
++          "name": "arch",
++          "type": "317"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "197",
++      "members": [
++        {
++          "name": "option",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[198]",
++      "element-type": "198",
++      "meta-type": "array"
++    },
++    {
++      "name": "198",
++      "members": [
++        {
++          "name": "option",
++          "type": "str"
++        },
++        {
++          "name": "parameters",
++          "type": "[325]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[199]",
++      "element-type": "199",
++      "meta-type": "array"
++    },
++    {
++      "name": "199",
++      "members": [
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "merge",
++          "type": "bool"
++        },
++        {
++          "name": "dump",
++          "type": "bool"
++        },
++        {
++          "name": "prealloc",
++          "type": "bool"
++        },
++        {
++          "name": "host-nodes",
++          "type": "[int]"
++        },
++        {
++          "name": "policy",
++          "type": "326"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[200]",
++      "element-type": "200",
++      "meta-type": "array"
++    },
++    {
++      "name": "200",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "dimm",
++          "type": "328"
++        },
++        {
++          "case": "nvdimm",
++          "type": "328"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "327"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "201",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "msg",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[202]",
++      "element-type": "202",
++      "meta-type": "array"
++    },
++    {
++      "name": "202",
++      "members": [
++        {
++          "name": "device",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "slot",
++          "type": "str"
++        },
++        {
++          "name": "slot-type",
++          "type": "329"
++        },
++        {
++          "name": "source",
++          "type": "int"
++        },
++        {
++          "name": "status",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "203",
++      "members": [
++        {
++          "name": "info",
++          "type": "202"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "204",
++      "members": [
++        {
++          "name": "offset",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "205",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[206]",
++      "element-type": "206",
++      "meta-type": "array"
++    },
++    {
++      "name": "206",
++      "members": [
++        {
++          "name": "version",
++          "type": "int"
++        },
++        {
++          "name": "emulated",
++          "type": "bool"
++        },
++        {
++          "name": "kernel",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[207]",
++      "element-type": "207",
++      "meta-type": "array"
++    },
++    {
++      "name": "207",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "vcpus-count",
++          "type": "int"
++        },
++        {
++          "name": "props",
++          "type": "308"
++        },
++        {
++          "name": "qom-path",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "208",
++      "members": [
++        {
++          "name": "guid",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "209",
++      "members": [
++        {
++          "name": "enabled",
++          "type": "bool"
++        },
++        {
++          "name": "api-major",
++          "type": "int"
++        },
++        {
++          "name": "api-minor",
++          "type": "int"
++        },
++        {
++          "name": "build-id",
++          "type": "int"
++        },
++        {
++          "name": "policy",
++          "type": "int"
++        },
++        {
++          "name": "state",
++          "type": "330"
++        },
++        {
++          "name": "handle",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "210",
++      "members": [
++        {
++          "name": "data",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "211",
++      "members": [
++        {
++          "name": "pdh",
++          "type": "str"
++        },
++        {
++          "name": "cert-chain",
++          "type": "str"
++        },
++        {
++          "name": "cbitpos",
++          "type": "int"
++        },
++        {
++          "name": "reduced-phys-bits",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "212",
++      "members": [
++        {
++          "name": "id",
++          "type": "any"
++        },
++        {
++          "name": "reason",
++          "type": "331"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "213",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "node",
++          "type": "333"
++        },
++        {
++          "case": "dist",
++          "type": "334"
++        },
++        {
++          "case": "cpu",
++          "type": "335"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "332"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "bool",
++      "json-type": "boolean",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "214",
++      "meta-type": "enum",
++      "values": [
++        "debug",
++        "inmigrate",
++        "internal-error",
++        "io-error",
++        "paused",
++        "postmigrate",
++        "prelaunch",
++        "finish-migrate",
++        "restore-vm",
++        "running",
++        "save-vm",
++        "shutdown",
++        "suspended",
++        "watchdog",
++        "guest-panicked",
++        "colo",
++        "preconfig"
++      ]
++    },
++    {
++      "name": "215",
++      "meta-type": "enum",
++      "values": [
++        "reset",
++        "shutdown",
++        "poweroff",
++        "pause",
++        "debug",
++        "none",
++        "inject-nmi"
++      ]
++    },
++    {
++      "name": "216",
++      "meta-type": "enum",
++      "values": [
++        "pause",
++        "poweroff"
++      ]
++    },
++    {
++      "name": "217",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "hyper-v",
++          "type": "337"
++        },
++        {
++          "case": "s390",
++          "type": "338"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "336"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "218",
++      "meta-type": "enum",
++      "values": [
++        "undefined",
++        "created",
++        "running",
++        "paused",
++        "ready",
++        "standby",
++        "waiting",
++        "pending",
++        "aborting",
++        "concluded",
++        "null"
++      ]
++    },
++    {
++      "name": "219",
++      "meta-type": "enum",
++      "values": [
++        "commit",
++        "stream",
++        "mirror",
++        "backup",
++        "create"
++      ]
++    },
++    {
++      "name": "[int]",
++      "element-type": "int",
++      "meta-type": "array"
++    },
++    {
++      "name": "220",
++      "meta-type": "enum",
++      "values": [
++        "ok",
++        "failed",
++        "nospace"
++      ]
++    },
++    {
++      "name": "[221]",
++      "element-type": "221",
++      "meta-type": "array"
++    },
++    {
++      "name": "221",
++      "members": [
++        {
++          "name": "name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "count",
++          "type": "int"
++        },
++        {
++          "name": "granularity",
++          "type": "int"
++        },
++        {
++          "name": "status",
++          "type": "339"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "222",
++      "members": [
++        {
++          "name": "rd_bytes",
++          "type": "int"
++        },
++        {
++          "name": "wr_bytes",
++          "type": "int"
++        },
++        {
++          "name": "rd_operations",
++          "type": "int"
++        },
++        {
++          "name": "wr_operations",
++          "type": "int"
++        },
++        {
++          "name": "flush_operations",
++          "type": "int"
++        },
++        {
++          "name": "flush_total_time_ns",
++          "type": "int"
++        },
++        {
++          "name": "wr_total_time_ns",
++          "type": "int"
++        },
++        {
++          "name": "rd_total_time_ns",
++          "type": "int"
++        },
++        {
++          "name": "wr_highest_offset",
++          "type": "int"
++        },
++        {
++          "name": "rd_merged",
++          "type": "int"
++        },
++        {
++          "name": "wr_merged",
++          "type": "int"
++        },
++        {
++          "name": "idle_time_ns",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "failed_rd_operations",
++          "type": "int"
++        },
++        {
++          "name": "failed_wr_operations",
++          "type": "int"
++        },
++        {
++          "name": "failed_flush_operations",
++          "type": "int"
++        },
++        {
++          "name": "invalid_rd_operations",
++          "type": "int"
++        },
++        {
++          "name": "invalid_wr_operations",
++          "type": "int"
++        },
++        {
++          "name": "invalid_flush_operations",
++          "type": "int"
++        },
++        {
++          "name": "account_invalid",
++          "type": "bool"
++        },
++        {
++          "name": "account_failed",
++          "type": "bool"
++        },
++        {
++          "name": "timed_stats",
++          "type": "[340]"
++        },
++        {
++          "name": "x_rd_latency_histogram",
++          "default": null,
++          "type": "341"
++        },
++        {
++          "name": "x_wr_latency_histogram",
++          "default": null,
++          "type": "341"
++        },
++        {
++          "name": "x_flush_latency_histogram",
++          "default": null,
++          "type": "341"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "223",
++      "meta-type": "enum",
++      "values": [
++        "existing",
++        "absolute-paths"
++      ]
++    },
++    {
++      "name": "224",
++      "meta-type": "enum",
++      "values": [
++        "top",
++        "full",
++        "none",
++        "incremental"
++      ]
++    },
++    {
++      "name": "225",
++      "meta-type": "enum",
++      "values": [
++        "report",
++        "ignore",
++        "enospc",
++        "stop",
++        "auto"
++      ]
++    },
++    {
++      "name": "226",
++      "meta-type": "enum",
++      "values": [
++        "off",
++        "on",
++        "unmap"
++      ]
++    },
++    {
++      "name": "227",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "format",
++          "type": "str"
++        },
++        {
++          "name": "dirty-flag",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "actual-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "virtual-size",
++          "type": "int"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "encrypted",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "compressed",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "backing-filename",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "full-backing-filename",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-filename-format",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "snapshots",
++          "default": null,
++          "type": "[66]"
++        },
++        {
++          "name": "backing-image",
++          "default": null,
++          "type": "227"
++        },
++        {
++          "name": "format-specific",
++          "default": null,
++          "type": "342"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "228",
++      "members": [
++        {
++          "name": "writeback",
++          "type": "bool"
++        },
++        {
++          "name": "direct",
++          "type": "bool"
++        },
++        {
++          "name": "no-flush",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "229",
++      "meta-type": "enum",
++      "values": [
++        "background",
++        "write-blocking"
++      ]
++    },
++    {
++      "name": "230",
++      "meta-type": "enum",
++      "values": [
++        "blkdebug",
++        "blklogwrites",
++        "blkverify",
++        "bochs",
++        "cloop",
++        "copy-on-read",
++        "dmg",
++        "file",
++        "ftp",
++        "ftps",
++        "gluster",
++        "host_cdrom",
++        "host_device",
++        "http",
++        "https",
++        "iscsi",
++        "luks",
++        "nbd",
++        "nfs",
++        "null-aio",
++        "null-co",
++        "nvme",
++        "parallels",
++        "qcow",
++        "qcow2",
++        "qed",
++        "quorum",
++        "raw",
++        "rbd",
++        "replication",
++        "sheepdog",
++        "ssh",
++        "throttle",
++        "vdi",
++        "vhdx",
++        "vmdk",
++        "vpc",
++        "vvfat",
++        "vxhs"
++      ]
++    },
++    {
++      "name": "231",
++      "meta-type": "enum",
++      "values": [
++        "ignore",
++        "unmap"
++      ]
++    },
++    {
++      "name": "232",
++      "members": [
++        {
++          "name": "direct",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "no-flush",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "233",
++      "members": [
++        {
++          "name": "image",
++          "type": "343"
++        },
++        {
++          "name": "config",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "align",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-transfer",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "opt-write-zero",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-write-zero",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "opt-discard",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "max-discard",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "inject-error",
++          "default": null,
++          "type": "[344]"
++        },
++        {
++          "name": "set-state",
++          "default": null,
++          "type": "[345]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "234",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "log",
++          "type": "343"
++        },
++        {
++          "name": "log-sector-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "log-append",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "log-super-update-interval",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "235",
++      "members": [
++        {
++          "name": "test",
++          "type": "343"
++        },
++        {
++          "name": "raw",
++          "type": "343"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "236",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "237",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "pr-manager",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "locking",
++          "default": null,
++          "type": "346"
++        },
++        {
++          "name": "aio",
++          "default": null,
++          "type": "347"
++        },
++        {
++          "name": "x-check-cache-dropped",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "238",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "239",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sslverify",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "240",
++      "members": [
++        {
++          "name": "volume",
++          "type": "str"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "type": "[348]"
++        },
++        {
++          "name": "debug",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "241",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cookie",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cookie-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "242",
++      "members": [
++        {
++          "name": "url",
++          "type": "str"
++        },
++        {
++          "name": "readahead",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-username",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "proxy-password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cookie",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sslverify",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "cookie-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "243",
++      "members": [
++        {
++          "name": "transport",
++          "type": "349"
++        },
++        {
++          "name": "portal",
++          "type": "str"
++        },
++        {
++          "name": "target",
++          "type": "str"
++        },
++        {
++          "name": "lun",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "password-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "initiator-name",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "header-digest",
++          "default": null,
++          "type": "350"
++        },
++        {
++          "name": "timeout",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "244",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "245",
++      "members": [
++        {
++          "name": "server",
++          "type": "348"
++        },
++        {
++          "name": "export",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "x-dirty-bitmap",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "246",
++      "members": [
++        {
++          "name": "server",
++          "type": "351"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tcp-syn-count",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "readahead-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "page-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "debug",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "247",
++      "members": [
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "latency-ns",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "248",
++      "members": [
++        {
++          "name": "device",
++          "type": "str"
++        },
++        {
++          "name": "namespace",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "249",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "352"
++        },
++        {
++          "name": "lazy-refcounts",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "pass-discard-request",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "pass-discard-snapshot",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "pass-discard-other",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "overlap-check",
++          "default": null,
++          "type": "353"
++        },
++        {
++          "name": "cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "l2-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "l2-cache-entry-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "refcount-cache-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cache-clean-interval",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "354"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "250",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "352"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "355"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "251",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "backing",
++          "default": null,
++          "type": "352"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "252",
++      "members": [
++        {
++          "name": "blkverify",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "children",
++          "type": "[343]"
++        },
++        {
++          "name": "vote-threshold",
++          "type": "int"
++        },
++        {
++          "name": "rewrite-corrupted",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "read-pattern",
++          "default": null,
++          "type": "356"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "253",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "offset",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "254",
++      "members": [
++        {
++          "name": "pool",
++          "type": "str"
++        },
++        {
++          "name": "image",
++          "type": "str"
++        },
++        {
++          "name": "conf",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "snapshot",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "auth-client-required",
++          "default": null,
++          "type": "[357]"
++        },
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "default": null,
++          "type": "[358]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "255",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "mode",
++          "type": "359"
++        },
++        {
++          "name": "top-id",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "256",
++      "members": [
++        {
++          "name": "server",
++          "type": "348"
++        },
++        {
++          "name": "vdi",
++          "type": "str"
++        },
++        {
++          "name": "snap-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tag",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "257",
++      "members": [
++        {
++          "name": "server",
++          "type": "360"
++        },
++        {
++          "name": "path",
++          "type": "str"
++        },
++        {
++          "name": "user",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "host-key-check",
++          "default": null,
++          "type": "361"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "258",
++      "members": [
++        {
++          "name": "throttle-group",
++          "type": "str"
++        },
++        {
++          "name": "file",
++          "type": "343"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "259",
++      "members": [
++        {
++          "name": "dir",
++          "type": "str"
++        },
++        {
++          "name": "fat-type",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "floppy",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "label",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "rw",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "260",
++      "members": [
++        {
++          "name": "vdisk-id",
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "type": "358"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "261",
++      "tag": "driver",
++      "variants": [
++        {
++          "case": "file",
++          "type": "362"
++        },
++        {
++          "case": "gluster",
++          "type": "363"
++        },
++        {
++          "case": "luks",
++          "type": "364"
++        },
++        {
++          "case": "nfs",
++          "type": "365"
++        },
++        {
++          "case": "parallels",
++          "type": "366"
++        },
++        {
++          "case": "qcow",
++          "type": "367"
++        },
++        {
++          "case": "qcow2",
++          "type": "368"
++        },
++        {
++          "case": "qed",
++          "type": "369"
++        },
++        {
++          "case": "rbd",
++          "type": "370"
++        },
++        {
++          "case": "sheepdog",
++          "type": "371"
++        },
++        {
++          "case": "ssh",
++          "type": "372"
++        },
++        {
++          "case": "vdi",
++          "type": "373"
++        },
++        {
++          "case": "vhdx",
++          "type": "374"
++        },
++        {
++          "case": "vpc",
++          "type": "375"
++        },
++        {
++          "case": "blkdebug",
++          "type": "0"
++        },
++        {
++          "case": "blklogwrites",
++          "type": "0"
++        },
++        {
++          "case": "blkverify",
++          "type": "0"
++        },
++        {
++          "case": "bochs",
++          "type": "0"
++        },
++        {
++          "case": "cloop",
++          "type": "0"
++        },
++        {
++          "case": "copy-on-read",
++          "type": "0"
++        },
++        {
++          "case": "dmg",
++          "type": "0"
++        },
++        {
++          "case": "ftp",
++          "type": "0"
++        },
++        {
++          "case": "ftps",
++          "type": "0"
++        },
++        {
++          "case": "host_cdrom",
++          "type": "0"
++        },
++        {
++          "case": "host_device",
++          "type": "0"
++        },
++        {
++          "case": "http",
++          "type": "0"
++        },
++        {
++          "case": "https",
++          "type": "0"
++        },
++        {
++          "case": "iscsi",
++          "type": "0"
++        },
++        {
++          "case": "nbd",
++          "type": "0"
++        },
++        {
++          "case": "null-aio",
++          "type": "0"
++        },
++        {
++          "case": "null-co",
++          "type": "0"
++        },
++        {
++          "case": "nvme",
++          "type": "0"
++        },
++        {
++          "case": "quorum",
++          "type": "0"
++        },
++        {
++          "case": "raw",
++          "type": "0"
++        },
++        {
++          "case": "replication",
++          "type": "0"
++        },
++        {
++          "case": "throttle",
++          "type": "0"
++        },
++        {
++          "case": "vmdk",
++          "type": "0"
++        },
++        {
++          "case": "vvfat",
++          "type": "0"
++        },
++        {
++          "case": "vxhs",
++          "type": "0"
++        }
++      ],
++      "members": [
++        {
++          "name": "driver",
++          "type": "230"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "262",
++      "meta-type": "enum",
++      "values": [
++        "retain",
++        "read-only",
++        "read-write"
++      ]
++    },
++    {
++      "name": "263",
++      "meta-type": "enum",
++      "values": [
++        "read",
++        "write"
++      ]
++    },
++    {
++      "name": "264",
++      "meta-type": "enum",
++      "values": [
++        "ignore",
++        "report",
++        "stop"
++      ]
++    },
++    {
++      "name": "265",
++      "members": [
++        {
++          "type": "str"
++        },
++        {
++          "type": "null"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "266",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "inet",
++          "type": "377"
++        },
++        {
++          "case": "unix",
++          "type": "378"
++        },
++        {
++          "case": "vsock",
++          "type": "379"
++        },
++        {
++          "case": "fd",
++          "type": "380"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "376"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "267",
++      "meta-type": "enum",
++      "values": [
++        "safe",
++        "hard"
++      ]
++    },
++    {
++      "name": "268",
++      "meta-type": "enum",
++      "values": [
++        "read",
++        "write",
++        "flush"
++      ]
++    },
++    {
++      "name": "269",
++      "meta-type": "enum",
++      "values": [
++        "utf8",
++        "base64"
++      ]
++    },
++    {
++      "name": "270",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "file",
++          "type": "382"
++        },
++        {
++          "case": "serial",
++          "type": "383"
++        },
++        {
++          "case": "parallel",
++          "type": "383"
++        },
++        {
++          "case": "pipe",
++          "type": "383"
++        },
++        {
++          "case": "socket",
++          "type": "384"
++        },
++        {
++          "case": "udp",
++          "type": "385"
++        },
++        {
++          "case": "pty",
++          "type": "386"
++        },
++        {
++          "case": "null",
++          "type": "386"
++        },
++        {
++          "case": "mux",
++          "type": "387"
++        },
++        {
++          "case": "msmouse",
++          "type": "386"
++        },
++        {
++          "case": "wctablet",
++          "type": "386"
++        },
++        {
++          "case": "braille",
++          "type": "386"
++        },
++        {
++          "case": "testdev",
++          "type": "386"
++        },
++        {
++          "case": "stdio",
++          "type": "388"
++        },
++        {
++          "case": "console",
++          "type": "386"
++        },
++        {
++          "case": "spicevmc",
++          "type": "389"
++        },
++        {
++          "case": "spiceport",
++          "type": "390"
++        },
++        {
++          "case": "vc",
++          "type": "391"
++        },
++        {
++          "case": "ringbuf",
++          "type": "392"
++        },
++        {
++          "case": "memory",
++          "type": "392"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "381"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "271",
++      "meta-type": "enum",
++      "values": [
++        "normal",
++        "none",
++        "all"
++      ]
++    },
++    {
++      "name": "[str]",
++      "element-type": "str",
++      "meta-type": "array"
++    },
++    {
++      "name": "272",
++      "meta-type": "enum",
++      "values": [
++        "half",
++        "full"
++      ]
++    },
++    {
++      "name": "273",
++      "meta-type": "enum",
++      "values": [
++        "off",
++        "on"
++      ]
++    },
++    {
++      "name": "274",
++      "members": [
++        {
++          "name": "priority",
++          "type": "int"
++        },
++        {
++          "name": "tbl-id",
++          "type": "int"
++        },
++        {
++          "name": "in-pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tunnel-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "eth-type",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "eth-src",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "eth-dst",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ip-proto",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ip-tos",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ip-dst",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "275",
++      "members": [
++        {
++          "name": "in-pport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tunnel-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "eth-src",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "eth-dst",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "ip-proto",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ip-tos",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "276",
++      "members": [
++        {
++          "name": "goto-tbl",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "group-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "tunnel-lport",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "new-vlan-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "out-pport",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "277",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "passthrough",
++          "type": "394"
++        },
++        {
++          "case": "emulator",
++          "type": "395"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "393"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "278",
++      "meta-type": "enum",
++      "values": [
++        "client",
++        "server",
++        "unknown"
++      ]
++    },
++    {
++      "name": "[279]",
++      "element-type": "279",
++      "meta-type": "array"
++    },
++    {
++      "name": "279",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "282"
++        },
++        {
++          "name": "connection-id",
++          "type": "int"
++        },
++        {
++          "name": "channel-type",
++          "type": "int"
++        },
++        {
++          "name": "channel-id",
++          "type": "int"
++        },
++        {
++          "name": "tls",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "280",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "282"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "281",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "282"
++        },
++        {
++          "name": "auth",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "282",
++      "meta-type": "enum",
++      "values": [
++        "ipv4",
++        "ipv6",
++        "unix",
++        "vsock",
++        "unknown"
++      ]
++    },
++    {
++      "name": "[283]",
++      "element-type": "283",
++      "meta-type": "array"
++    },
++    {
++      "name": "283",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "282"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        },
++        {
++          "name": "x509_dname",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "sasl_username",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[284]",
++      "element-type": "284",
++      "meta-type": "array"
++    },
++    {
++      "name": "284",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "282"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        },
++        {
++          "name": "auth",
++          "type": "285"
++        },
++        {
++          "name": "vencrypt",
++          "default": null,
++          "type": "286"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "285",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "vnc",
++        "ra2",
++        "ra2ne",
++        "tight",
++        "ultra",
++        "tls",
++        "vencrypt",
++        "sasl"
++      ]
++    },
++    {
++      "name": "286",
++      "meta-type": "enum",
++      "values": [
++        "plain",
++        "tls-none",
++        "x509-none",
++        "tls-vnc",
++        "x509-vnc",
++        "tls-plain",
++        "x509-plain",
++        "tls-sasl",
++        "x509-sasl"
++      ]
++    },
++    {
++      "name": "287",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "282"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        },
++        {
++          "name": "auth",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "288",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "service",
++          "type": "str"
++        },
++        {
++          "name": "family",
++          "type": "282"
++        },
++        {
++          "name": "websocket",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[289]",
++      "element-type": "289",
++      "meta-type": "array"
++    },
++    {
++      "name": "289",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "number",
++          "type": "397"
++        },
++        {
++          "case": "qcode",
++          "type": "398"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "396"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[290]",
++      "element-type": "290",
++      "meta-type": "array"
++    },
++    {
++      "name": "290",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "key",
++          "type": "400"
++        },
++        {
++          "case": "btn",
++          "type": "401"
++        },
++        {
++          "case": "rel",
++          "type": "402"
++        },
++        {
++          "case": "abs",
++          "type": "402"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "399"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "291",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "setup",
++        "cancelling",
++        "cancelled",
++        "active",
++        "postcopy-active",
++        "postcopy-paused",
++        "postcopy-recover",
++        "completed",
++        "failed",
++        "colo",
++        "pre-switchover",
++        "device"
++      ]
++    },
++    {
++      "name": "292",
++      "members": [
++        {
++          "name": "transferred",
++          "type": "int"
++        },
++        {
++          "name": "remaining",
++          "type": "int"
++        },
++        {
++          "name": "total",
++          "type": "int"
++        },
++        {
++          "name": "duplicate",
++          "type": "int"
++        },
++        {
++          "name": "skipped",
++          "type": "int"
++        },
++        {
++          "name": "normal",
++          "type": "int"
++        },
++        {
++          "name": "normal-bytes",
++          "type": "int"
++        },
++        {
++          "name": "dirty-pages-rate",
++          "type": "int"
++        },
++        {
++          "name": "mbps",
++          "type": "number"
++        },
++        {
++          "name": "dirty-sync-count",
++          "type": "int"
++        },
++        {
++          "name": "postcopy-requests",
++          "type": "int"
++        },
++        {
++          "name": "page-size",
++          "type": "int"
++        },
++        {
++          "name": "multifd-bytes",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "293",
++      "members": [
++        {
++          "name": "cache-size",
++          "type": "int"
++        },
++        {
++          "name": "bytes",
++          "type": "int"
++        },
++        {
++          "name": "pages",
++          "type": "int"
++        },
++        {
++          "name": "cache-miss",
++          "type": "int"
++        },
++        {
++          "name": "cache-miss-rate",
++          "type": "number"
++        },
++        {
++          "name": "overflow",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "294",
++      "meta-type": "enum",
++      "values": [
++        "xbzrle",
++        "rdma-pin-all",
++        "auto-converge",
++        "zero-blocks",
++        "compress",
++        "events",
++        "postcopy-ram",
++        "x-colo",
++        "release-ram",
++        "block",
++        "return-path",
++        "pause-before-switchover",
++        "x-multifd",
++        "dirty-bitmaps",
++        "postcopy-blocktime",
++        "late-block-activate"
++      ]
++    },
++    {
++      "name": "number",
++      "json-type": "number",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "[295]",
++      "element-type": "295",
++      "meta-type": "array"
++    },
++    {
++      "name": "295",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "abort",
++          "type": "404"
++        },
++        {
++          "case": "block-dirty-bitmap-add",
++          "type": "405"
++        },
++        {
++          "case": "block-dirty-bitmap-clear",
++          "type": "406"
++        },
++        {
++          "case": "x-block-dirty-bitmap-enable",
++          "type": "406"
++        },
++        {
++          "case": "x-block-dirty-bitmap-disable",
++          "type": "406"
++        },
++        {
++          "case": "blockdev-backup",
++          "type": "407"
++        },
++        {
++          "case": "blockdev-snapshot",
++          "type": "408"
++        },
++        {
++          "case": "blockdev-snapshot-internal-sync",
++          "type": "409"
++        },
++        {
++          "case": "blockdev-snapshot-sync",
++          "type": "410"
++        },
++        {
++          "case": "drive-backup",
++          "type": "411"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "403"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "296",
++      "members": [
++        {
++          "name": "completion-mode",
++          "default": null,
++          "type": "412"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "297",
++      "meta-type": "enum",
++      "values": [
++        "unavailable",
++        "disabled",
++        "enabled"
++      ]
++    },
++    {
++      "name": "298",
++      "meta-type": "enum",
++      "values": [
++        "builtin",
++        "enum",
++        "array",
++        "object",
++        "alternate",
++        "command",
++        "event"
++      ]
++    },
++    {
++      "name": "299",
++      "members": [
++        {
++          "name": "json-type",
++          "type": "413"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "300",
++      "members": [
++        {
++          "name": "values",
++          "type": "[str]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "301",
++      "members": [
++        {
++          "name": "element-type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "302",
++      "members": [
++        {
++          "name": "members",
++          "type": "[414]"
++        },
++        {
++          "name": "tag",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "variants",
++          "default": null,
++          "type": "[415]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "303",
++      "members": [
++        {
++          "name": "members",
++          "type": "[416]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "304",
++      "members": [
++        {
++          "name": "arg-type",
++          "type": "str"
++        },
++        {
++          "name": "ret-type",
++          "type": "str"
++        },
++        {
++          "name": "allow-oob",
++          "type": "bool"
++        },
++        {
++          "name": "allow-preconfig",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "305",
++      "members": [
++        {
++          "name": "arg-type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[306]",
++      "element-type": "306",
++      "meta-type": "array"
++    },
++    {
++      "name": "306",
++      "meta-type": "enum",
++      "values": [
++        "oob"
++      ]
++    },
++    {
++      "name": "307",
++      "members": [
++        {
++          "name": "major",
++          "type": "int"
++        },
++        {
++          "name": "minor",
++          "type": "int"
++        },
++        {
++          "name": "micro",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "308",
++      "members": [
++        {
++          "name": "node-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "socket-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "core-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "thread-id",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "309",
++      "meta-type": "enum",
++      "values": [
++        "x86",
++        "sparc",
++        "ppc",
++        "mips",
++        "tricore",
++        "s390",
++        "riscv",
++        "other"
++      ]
++    },
++    {
++      "name": "310",
++      "members": [
++        {
++          "name": "pc",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "311",
++      "members": [
++        {
++          "name": "pc",
++          "type": "int"
++        },
++        {
++          "name": "npc",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "312",
++      "members": [
++        {
++          "name": "nip",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "313",
++      "members": [
++        {
++          "name": "PC",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "314",
++      "members": [
++        {
++          "name": "PC",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "315",
++      "members": [
++        {
++          "name": "cpu-state",
++          "type": "417"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "316",
++      "members": [
++        {
++          "name": "pc",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "317",
++      "meta-type": "enum",
++      "values": [
++        "aarch64",
++        "alpha",
++        "arm",
++        "cris",
++        "hppa",
++        "i386",
++        "lm32",
++        "m68k",
++        "microblaze",
++        "microblazeel",
++        "mips",
++        "mips64",
++        "mips64el",
++        "mipsel",
++        "moxie",
++        "nios2",
++        "or1k",
++        "ppc",
++        "ppc64",
++        "ppcemb",
++        "riscv32",
++        "riscv64",
++        "s390x",
++        "sh4",
++        "sh4eb",
++        "sparc",
++        "sparc64",
++        "tricore",
++        "unicore32",
++        "x86_64",
++        "xtensa",
++        "xtensaeb"
++      ]
++    },
++    {
++      "name": "[318]",
++      "element-type": "318",
++      "meta-type": "array"
++    },
++    {
++      "name": "318",
++      "members": [
++        {
++          "name": "bus",
++          "type": "int"
++        },
++        {
++          "name": "slot",
++          "type": "int"
++        },
++        {
++          "name": "function",
++          "type": "int"
++        },
++        {
++          "name": "class_info",
++          "type": "418"
++        },
++        {
++          "name": "id",
++          "type": "419"
++        },
++        {
++          "name": "irq",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "qdev_id",
++          "type": "str"
++        },
++        {
++          "name": "pci_bridge",
++          "default": null,
++          "type": "420"
++        },
++        {
++          "name": "regions",
++          "type": "[421]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "319",
++      "meta-type": "enum",
++      "values": [
++        "elf",
++        "kdump-zlib",
++        "kdump-lzo",
++        "kdump-snappy",
++        "win-dmp"
++      ]
++    },
++    {
++      "name": "320",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "active",
++        "completed",
++        "failed"
++      ]
++    },
++    {
++      "name": "[319]",
++      "element-type": "319",
++      "meta-type": "array"
++    },
++    {
++      "name": "321",
++      "meta-type": "enum",
++      "values": [
++        "static",
++        "full"
++      ]
++    },
++    {
++      "name": "322",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "props",
++          "default": null,
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "323",
++      "meta-type": "enum",
++      "values": [
++        "incompatible",
++        "identical",
++        "superset",
++        "subset"
++      ]
++    },
++    {
++      "name": "[324]",
++      "element-type": "324",
++      "meta-type": "array"
++    },
++    {
++      "name": "324",
++      "members": [
++        {
++          "name": "fd",
++          "type": "int"
++        },
++        {
++          "name": "opaque",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[325]",
++      "element-type": "325",
++      "meta-type": "array"
++    },
++    {
++      "name": "325",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "422"
++        },
++        {
++          "name": "help",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "default",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "326",
++      "meta-type": "enum",
++      "values": [
++        "default",
++        "preferred",
++        "bind",
++        "interleave"
++      ]
++    },
++    {
++      "name": "327",
++      "meta-type": "enum",
++      "values": [
++        "dimm",
++        "nvdimm"
++      ]
++    },
++    {
++      "name": "328",
++      "members": [
++        {
++          "name": "data",
++          "type": "423"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "329",
++      "meta-type": "enum",
++      "values": [
++        "DIMM",
++        "CPU"
++      ]
++    },
++    {
++      "name": "330",
++      "meta-type": "enum",
++      "values": [
++        "uninit",
++        "launch-update",
++        "launch-secret",
++        "running",
++        "send-update",
++        "receive-update"
++      ]
++    },
++    {
++      "name": "331",
++      "meta-type": "enum",
++      "values": [
++        "queue-full"
++      ]
++    },
++    {
++      "name": "332",
++      "meta-type": "enum",
++      "values": [
++        "node",
++        "dist",
++        "cpu"
++      ]
++    },
++    {
++      "name": "333",
++      "members": [
++        {
++          "name": "nodeid",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cpus",
++          "default": null,
++          "type": "[int]"
++        },
++        {
++          "name": "mem",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "memdev",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "334",
++      "members": [
++        {
++          "name": "src",
++          "type": "int"
++        },
++        {
++          "name": "dst",
++          "type": "int"
++        },
++        {
++          "name": "val",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "335",
++      "members": [
++        {
++          "name": "node-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "socket-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "core-id",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "thread-id",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "336",
++      "meta-type": "enum",
++      "values": [
++        "hyper-v",
++        "s390"
++      ]
++    },
++    {
++      "name": "337",
++      "members": [
++        {
++          "name": "arg1",
++          "type": "int"
++        },
++        {
++          "name": "arg2",
++          "type": "int"
++        },
++        {
++          "name": "arg3",
++          "type": "int"
++        },
++        {
++          "name": "arg4",
++          "type": "int"
++        },
++        {
++          "name": "arg5",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "338",
++      "members": [
++        {
++          "name": "core",
++          "type": "int"
++        },
++        {
++          "name": "psw-mask",
++          "type": "int"
++        },
++        {
++          "name": "psw-addr",
++          "type": "int"
++        },
++        {
++          "name": "reason",
++          "type": "424"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "339",
++      "meta-type": "enum",
++      "values": [
++        "active",
++        "disabled",
++        "frozen",
++        "locked"
++      ]
++    },
++    {
++      "name": "[340]",
++      "element-type": "340",
++      "meta-type": "array"
++    },
++    {
++      "name": "340",
++      "members": [
++        {
++          "name": "interval_length",
++          "type": "int"
++        },
++        {
++          "name": "min_rd_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "max_rd_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_rd_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "min_wr_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "max_wr_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_wr_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "min_flush_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "max_flush_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_flush_latency_ns",
++          "type": "int"
++        },
++        {
++          "name": "avg_rd_queue_depth",
++          "type": "number"
++        },
++        {
++          "name": "avg_wr_queue_depth",
++          "type": "number"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "341",
++      "members": [
++        {
++          "name": "boundaries",
++          "type": "[int]"
++        },
++        {
++          "name": "bins",
++          "type": "[int]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[66]",
++      "element-type": "66",
++      "meta-type": "array"
++    },
++    {
++      "name": "342",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "qcow2",
++          "type": "426"
++        },
++        {
++          "case": "vmdk",
++          "type": "427"
++        },
++        {
++          "case": "luks",
++          "type": "428"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "425"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "343",
++      "members": [
++        {
++          "type": "44"
++        },
++        {
++          "type": "str"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "[344]",
++      "element-type": "344",
++      "meta-type": "array"
++    },
++    {
++      "name": "344",
++      "members": [
++        {
++          "name": "event",
++          "type": "429"
++        },
++        {
++          "name": "state",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "errno",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "sector",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "once",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "immediately",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[345]",
++      "element-type": "345",
++      "meta-type": "array"
++    },
++    {
++      "name": "345",
++      "members": [
++        {
++          "name": "event",
++          "type": "429"
++        },
++        {
++          "name": "state",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "new_state",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "346",
++      "meta-type": "enum",
++      "values": [
++        "auto",
++        "on",
++        "off"
++      ]
++    },
++    {
++      "name": "347",
++      "meta-type": "enum",
++      "values": [
++        "threads",
++        "native"
++      ]
++    },
++    {
++      "name": "[348]",
++      "element-type": "348",
++      "meta-type": "array"
++    },
++    {
++      "name": "348",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "inet",
++          "type": "360"
++        },
++        {
++          "case": "unix",
++          "type": "431"
++        },
++        {
++          "case": "vsock",
++          "type": "432"
++        },
++        {
++          "case": "fd",
++          "type": "433"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "430"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "349",
++      "meta-type": "enum",
++      "values": [
++        "tcp",
++        "iser"
++      ]
++    },
++    {
++      "name": "350",
++      "meta-type": "enum",
++      "values": [
++        "crc32c",
++        "none",
++        "crc32c-none",
++        "none-crc32c"
++      ]
++    },
++    {
++      "name": "351",
++      "members": [
++        {
++          "name": "type",
++          "type": "434"
++        },
++        {
++          "name": "host",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "352",
++      "members": [
++        {
++          "type": "44"
++        },
++        {
++          "type": "str"
++        },
++        {
++          "type": "null"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "353",
++      "members": [
++        {
++          "type": "435"
++        },
++        {
++          "type": "436"
++        }
++      ],
++      "meta-type": "alternate"
++    },
++    {
++      "name": "354",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "aes",
++          "type": "438"
++        },
++        {
++          "case": "luks",
++          "type": "439"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "437"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "355",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "aes",
++          "type": "438"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "440"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[343]",
++      "element-type": "343",
++      "meta-type": "array"
++    },
++    {
++      "name": "356",
++      "meta-type": "enum",
++      "values": [
++        "quorum",
++        "fifo"
++      ]
++    },
++    {
++      "name": "[357]",
++      "element-type": "357",
++      "meta-type": "array"
++    },
++    {
++      "name": "357",
++      "meta-type": "enum",
++      "values": [
++        "cephx",
++        "none"
++      ]
++    },
++    {
++      "name": "[358]",
++      "element-type": "358",
++      "meta-type": "array"
++    },
++    {
++      "name": "358",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "359",
++      "meta-type": "enum",
++      "values": [
++        "primary",
++        "secondary"
++      ]
++    },
++    {
++      "name": "360",
++      "members": [
++        {
++          "name": "host",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        },
++        {
++          "name": "numeric",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "to",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "ipv4",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "ipv6",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "361",
++      "tag": "mode",
++      "variants": [
++        {
++          "case": "hash",
++          "type": "442"
++        },
++        {
++          "case": "none",
++          "type": "0"
++        },
++        {
++          "case": "known_hosts",
++          "type": "0"
++        }
++      ],
++      "members": [
++        {
++          "name": "mode",
++          "type": "441"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "362",
++      "members": [
++        {
++          "name": "filename",
++          "type": "str"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "preallocation",
++          "default": null,
++          "type": "443"
++        },
++        {
++          "name": "nocow",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "363",
++      "members": [
++        {
++          "name": "location",
++          "type": "240"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "preallocation",
++          "default": null,
++          "type": "443"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "364",
++      "members": [
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cipher-alg",
++          "default": null,
++          "type": "444"
++        },
++        {
++          "name": "cipher-mode",
++          "default": null,
++          "type": "445"
++        },
++        {
++          "name": "ivgen-alg",
++          "default": null,
++          "type": "446"
++        },
++        {
++          "name": "ivgen-hash-alg",
++          "default": null,
++          "type": "447"
++        },
++        {
++          "name": "hash-alg",
++          "default": null,
++          "type": "447"
++        },
++        {
++          "name": "iter-time",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "365",
++      "members": [
++        {
++          "name": "location",
++          "type": "246"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "366",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "367",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "448"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "368",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "version",
++          "default": null,
++          "type": "449"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-fmt",
++          "default": null,
++          "type": "230"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "448"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "preallocation",
++          "default": null,
++          "type": "443"
++        },
++        {
++          "name": "lazy-refcounts",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-bits",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "369",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "backing-fmt",
++          "default": null,
++          "type": "230"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "table-size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "370",
++      "members": [
++        {
++          "name": "location",
++          "type": "254"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "cluster-size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "371",
++      "members": [
++        {
++          "name": "location",
++          "type": "256"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "backing-file",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "preallocation",
++          "default": null,
++          "type": "443"
++        },
++        {
++          "name": "redundancy",
++          "default": null,
++          "type": "450"
++        },
++        {
++          "name": "object-size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "372",
++      "members": [
++        {
++          "name": "location",
++          "type": "257"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "373",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "preallocation",
++          "default": null,
++          "type": "443"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "374",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "log-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "block-size",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "subformat",
++          "default": null,
++          "type": "451"
++        },
++        {
++          "name": "block-state-zero",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "375",
++      "members": [
++        {
++          "name": "file",
++          "type": "343"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "subformat",
++          "default": null,
++          "type": "452"
++        },
++        {
++          "name": "force-size",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "null",
++      "json-type": "null",
++      "meta-type": "builtin"
++    },
++    {
++      "name": "376",
++      "meta-type": "enum",
++      "values": [
++        "inet",
++        "unix",
++        "vsock",
++        "fd"
++      ]
++    },
++    {
++      "name": "377",
++      "members": [
++        {
++          "name": "data",
++          "type": "360"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "378",
++      "members": [
++        {
++          "name": "data",
++          "type": "431"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "379",
++      "members": [
++        {
++          "name": "data",
++          "type": "432"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "380",
++      "members": [
++        {
++          "name": "data",
++          "type": "433"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "381",
++      "meta-type": "enum",
++      "values": [
++        "file",
++        "serial",
++        "parallel",
++        "pipe",
++        "socket",
++        "udp",
++        "pty",
++        "null",
++        "mux",
++        "msmouse",
++        "wctablet",
++        "braille",
++        "testdev",
++        "stdio",
++        "console",
++        "spicevmc",
++        "spiceport",
++        "vc",
++        "ringbuf",
++        "memory"
++      ]
++    },
++    {
++      "name": "382",
++      "members": [
++        {
++          "name": "data",
++          "type": "453"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "383",
++      "members": [
++        {
++          "name": "data",
++          "type": "454"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "384",
++      "members": [
++        {
++          "name": "data",
++          "type": "455"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "385",
++      "members": [
++        {
++          "name": "data",
++          "type": "456"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "386",
++      "members": [
++        {
++          "name": "data",
++          "type": "457"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "387",
++      "members": [
++        {
++          "name": "data",
++          "type": "458"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "388",
++      "members": [
++        {
++          "name": "data",
++          "type": "459"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "389",
++      "members": [
++        {
++          "name": "data",
++          "type": "460"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "390",
++      "members": [
++        {
++          "name": "data",
++          "type": "461"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "391",
++      "members": [
++        {
++          "name": "data",
++          "type": "462"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "392",
++      "members": [
++        {
++          "name": "data",
++          "type": "463"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "393",
++      "meta-type": "enum",
++      "values": [
++        "passthrough",
++        "emulator"
++      ]
++    },
++    {
++      "name": "394",
++      "members": [
++        {
++          "name": "data",
++          "type": "464"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "395",
++      "members": [
++        {
++          "name": "data",
++          "type": "465"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "396",
++      "meta-type": "enum",
++      "values": [
++        "number",
++        "qcode"
++      ]
++    },
++    {
++      "name": "397",
++      "members": [
++        {
++          "name": "data",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "398",
++      "members": [
++        {
++          "name": "data",
++          "type": "466"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "399",
++      "meta-type": "enum",
++      "values": [
++        "key",
++        "btn",
++        "rel",
++        "abs"
++      ]
++    },
++    {
++      "name": "400",
++      "members": [
++        {
++          "name": "data",
++          "type": "467"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "401",
++      "members": [
++        {
++          "name": "data",
++          "type": "468"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "402",
++      "members": [
++        {
++          "name": "data",
++          "type": "469"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "403",
++      "meta-type": "enum",
++      "values": [
++        "abort",
++        "block-dirty-bitmap-add",
++        "block-dirty-bitmap-clear",
++        "x-block-dirty-bitmap-enable",
++        "x-block-dirty-bitmap-disable",
++        "blockdev-backup",
++        "blockdev-snapshot",
++        "blockdev-snapshot-internal-sync",
++        "blockdev-snapshot-sync",
++        "drive-backup"
++      ]
++    },
++    {
++      "name": "404",
++      "members": [
++        {
++          "name": "data",
++          "type": "470"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "405",
++      "members": [
++        {
++          "name": "data",
++          "type": "30"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "406",
++      "members": [
++        {
++          "name": "data",
++          "type": "31"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "407",
++      "members": [
++        {
++          "name": "data",
++          "type": "27"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "408",
++      "members": [
++        {
++          "name": "data",
++          "type": "23"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "409",
++      "members": [
++        {
++          "name": "data",
++          "type": "64"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "410",
++      "members": [
++        {
++          "name": "data",
++          "type": "22"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "411",
++      "members": [
++        {
++          "name": "data",
++          "type": "26"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "412",
++      "meta-type": "enum",
++      "values": [
++        "individual",
++        "grouped"
++      ]
++    },
++    {
++      "name": "413",
++      "meta-type": "enum",
++      "values": [
++        "string",
++        "number",
++        "int",
++        "boolean",
++        "null",
++        "object",
++        "array",
++        "value"
++      ]
++    },
++    {
++      "name": "[414]",
++      "element-type": "414",
++      "meta-type": "array"
++    },
++    {
++      "name": "414",
++      "members": [
++        {
++          "name": "name",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "default",
++          "default": null,
++          "type": "any"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[415]",
++      "element-type": "415",
++      "meta-type": "array"
++    },
++    {
++      "name": "415",
++      "members": [
++        {
++          "name": "case",
++          "type": "str"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[416]",
++      "element-type": "416",
++      "meta-type": "array"
++    },
++    {
++      "name": "416",
++      "members": [
++        {
++          "name": "type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "417",
++      "meta-type": "enum",
++      "values": [
++        "uninitialized",
++        "stopped",
++        "check-stop",
++        "operating",
++        "load"
++      ]
++    },
++    {
++      "name": "418",
++      "members": [
++        {
++          "name": "desc",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "class",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "419",
++      "members": [
++        {
++          "name": "device",
++          "type": "int"
++        },
++        {
++          "name": "vendor",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "420",
++      "members": [
++        {
++          "name": "bus",
++          "type": "471"
++        },
++        {
++          "name": "devices",
++          "default": null,
++          "type": "[318]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[421]",
++      "element-type": "421",
++      "meta-type": "array"
++    },
++    {
++      "name": "421",
++      "members": [
++        {
++          "name": "bar",
++          "type": "int"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        },
++        {
++          "name": "address",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "prefetch",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "mem_type_64",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "422",
++      "meta-type": "enum",
++      "values": [
++        "string",
++        "boolean",
++        "number",
++        "size"
++      ]
++    },
++    {
++      "name": "423",
++      "members": [
++        {
++          "name": "id",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "addr",
++          "type": "int"
++        },
++        {
++          "name": "size",
++          "type": "int"
++        },
++        {
++          "name": "slot",
++          "type": "int"
++        },
++        {
++          "name": "node",
++          "type": "int"
++        },
++        {
++          "name": "memdev",
++          "type": "str"
++        },
++        {
++          "name": "hotplugged",
++          "type": "bool"
++        },
++        {
++          "name": "hotpluggable",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "424",
++      "meta-type": "enum",
++      "values": [
++        "unknown",
++        "disabled-wait",
++        "extint-loop",
++        "pgmint-loop",
++        "opint-loop"
++      ]
++    },
++    {
++      "name": "425",
++      "meta-type": "enum",
++      "values": [
++        "qcow2",
++        "vmdk",
++        "luks"
++      ]
++    },
++    {
++      "name": "426",
++      "members": [
++        {
++          "name": "data",
++          "type": "472"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "427",
++      "members": [
++        {
++          "name": "data",
++          "type": "473"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "428",
++      "members": [
++        {
++          "name": "data",
++          "type": "474"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "429",
++      "meta-type": "enum",
++      "values": [
++        "l1_update",
++        "l1_grow_alloc_table",
++        "l1_grow_write_table",
++        "l1_grow_activate_table",
++        "l2_load",
++        "l2_update",
++        "l2_update_compressed",
++        "l2_alloc_cow_read",
++        "l2_alloc_write",
++        "read_aio",
++        "read_backing_aio",
++        "read_compressed",
++        "write_aio",
++        "write_compressed",
++        "vmstate_load",
++        "vmstate_save",
++        "cow_read",
++        "cow_write",
++        "reftable_load",
++        "reftable_grow",
++        "reftable_update",
++        "refblock_load",
++        "refblock_update",
++        "refblock_update_part",
++        "refblock_alloc",
++        "refblock_alloc_hookup",
++        "refblock_alloc_write",
++        "refblock_alloc_write_blocks",
++        "refblock_alloc_write_table",
++        "refblock_alloc_switch_table",
++        "cluster_alloc",
++        "cluster_alloc_bytes",
++        "cluster_free",
++        "flush_to_os",
++        "flush_to_disk",
++        "pwritev_rmw_head",
++        "pwritev_rmw_after_head",
++        "pwritev_rmw_tail",
++        "pwritev_rmw_after_tail",
++        "pwritev",
++        "pwritev_zero",
++        "pwritev_done",
++        "empty_image_prepare",
++        "l1_shrink_write_table",
++        "l1_shrink_free_l2_clusters",
++        "cor_write"
++      ]
++    },
++    {
++      "name": "430",
++      "meta-type": "enum",
++      "values": [
++        "inet",
++        "unix",
++        "vsock",
++        "fd"
++      ]
++    },
++    {
++      "name": "431",
++      "members": [
++        {
++          "name": "path",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "432",
++      "members": [
++        {
++          "name": "cid",
++          "type": "str"
++        },
++        {
++          "name": "port",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "433",
++      "members": [
++        {
++          "name": "str",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "434",
++      "meta-type": "enum",
++      "values": [
++        "inet"
++      ]
++    },
++    {
++      "name": "435",
++      "members": [
++        {
++          "name": "template",
++          "default": null,
++          "type": "436"
++        },
++        {
++          "name": "main-header",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "active-l1",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "active-l2",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-table",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-block",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "snapshot-table",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "inactive-l1",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "inactive-l2",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "436",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "constant",
++        "cached",
++        "all"
++      ]
++    },
++    {
++      "name": "437",
++      "meta-type": "enum",
++      "values": [
++        "aes",
++        "luks"
++      ]
++    },
++    {
++      "name": "438",
++      "members": [
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "439",
++      "members": [
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "440",
++      "meta-type": "enum",
++      "values": [
++        "aes"
++      ]
++    },
++    {
++      "name": "441",
++      "meta-type": "enum",
++      "values": [
++        "none",
++        "hash",
++        "known_hosts"
++      ]
++    },
++    {
++      "name": "442",
++      "members": [
++        {
++          "name": "type",
++          "type": "475"
++        },
++        {
++          "name": "hash",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "443",
++      "meta-type": "enum",
++      "values": [
++        "off",
++        "metadata",
++        "falloc",
++        "full"
++      ]
++    },
++    {
++      "name": "444",
++      "meta-type": "enum",
++      "values": [
++        "aes-128",
++        "aes-192",
++        "aes-256",
++        "des-rfb",
++        "3des",
++        "cast5-128",
++        "serpent-128",
++        "serpent-192",
++        "serpent-256",
++        "twofish-128",
++        "twofish-192",
++        "twofish-256"
++      ]
++    },
++    {
++      "name": "445",
++      "meta-type": "enum",
++      "values": [
++        "ecb",
++        "cbc",
++        "xts",
++        "ctr"
++      ]
++    },
++    {
++      "name": "446",
++      "meta-type": "enum",
++      "values": [
++        "plain",
++        "plain64",
++        "essiv"
++      ]
++    },
++    {
++      "name": "447",
++      "meta-type": "enum",
++      "values": [
++        "md5",
++        "sha1",
++        "sha224",
++        "sha256",
++        "sha384",
++        "sha512",
++        "ripemd160"
++      ]
++    },
++    {
++      "name": "448",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "qcow",
++          "type": "438"
++        },
++        {
++          "case": "luks",
++          "type": "477"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "476"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "449",
++      "meta-type": "enum",
++      "values": [
++        "v2",
++        "v3"
++      ]
++    },
++    {
++      "name": "450",
++      "tag": "type",
++      "variants": [
++        {
++          "case": "full",
++          "type": "479"
++        },
++        {
++          "case": "erasure-coded",
++          "type": "480"
++        }
++      ],
++      "members": [
++        {
++          "name": "type",
++          "type": "478"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "451",
++      "meta-type": "enum",
++      "values": [
++        "dynamic",
++        "fixed"
++      ]
++    },
++    {
++      "name": "452",
++      "meta-type": "enum",
++      "values": [
++        "dynamic",
++        "fixed"
++      ]
++    },
++    {
++      "name": "453",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "in",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "out",
++          "type": "str"
++        },
++        {
++          "name": "append",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "454",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "device",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "455",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "addr",
++          "type": "266"
++        },
++        {
++          "name": "tls-creds",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "server",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "wait",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "nodelay",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "telnet",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "tn3270",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "reconnect",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "456",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "remote",
++          "type": "266"
++        },
++        {
++          "name": "local",
++          "default": null,
++          "type": "266"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "457",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "458",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "chardev",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "459",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "signal",
++          "default": null,
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "460",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "type",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "461",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "fqdn",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "462",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "width",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "height",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "cols",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "rows",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "463",
++      "members": [
++        {
++          "name": "logfile",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "logappend",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "size",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "464",
++      "members": [
++        {
++          "name": "path",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cancel-path",
++          "default": null,
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "465",
++      "members": [
++        {
++          "name": "chardev",
++          "type": "str"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "466",
++      "meta-type": "enum",
++      "values": [
++        "unmapped",
++        "shift",
++        "shift_r",
++        "alt",
++        "alt_r",
++        "ctrl",
++        "ctrl_r",
++        "menu",
++        "esc",
++        "1",
++        "2",
++        "3",
++        "4",
++        "5",
++        "6",
++        "7",
++        "8",
++        "9",
++        "0",
++        "minus",
++        "equal",
++        "backspace",
++        "tab",
++        "q",
++        "w",
++        "e",
++        "r",
++        "t",
++        "y",
++        "u",
++        "i",
++        "o",
++        "p",
++        "bracket_left",
++        "bracket_right",
++        "ret",
++        "a",
++        "s",
++        "d",
++        "f",
++        "g",
++        "h",
++        "j",
++        "k",
++        "l",
++        "semicolon",
++        "apostrophe",
++        "grave_accent",
++        "backslash",
++        "z",
++        "x",
++        "c",
++        "v",
++        "b",
++        "n",
++        "m",
++        "comma",
++        "dot",
++        "slash",
++        "asterisk",
++        "spc",
++        "caps_lock",
++        "f1",
++        "f2",
++        "f3",
++        "f4",
++        "f5",
++        "f6",
++        "f7",
++        "f8",
++        "f9",
++        "f10",
++        "num_lock",
++        "scroll_lock",
++        "kp_divide",
++        "kp_multiply",
++        "kp_subtract",
++        "kp_add",
++        "kp_enter",
++        "kp_decimal",
++        "sysrq",
++        "kp_0",
++        "kp_1",
++        "kp_2",
++        "kp_3",
++        "kp_4",
++        "kp_5",
++        "kp_6",
++        "kp_7",
++        "kp_8",
++        "kp_9",
++        "less",
++        "f11",
++        "f12",
++        "print",
++        "home",
++        "pgup",
++        "pgdn",
++        "end",
++        "left",
++        "up",
++        "down",
++        "right",
++        "insert",
++        "delete",
++        "stop",
++        "again",
++        "props",
++        "undo",
++        "front",
++        "copy",
++        "open",
++        "paste",
++        "find",
++        "cut",
++        "lf",
++        "help",
++        "meta_l",
++        "meta_r",
++        "compose",
++        "pause",
++        "ro",
++        "hiragana",
++        "henkan",
++        "yen",
++        "muhenkan",
++        "katakanahiragana",
++        "kp_comma",
++        "kp_equals",
++        "power",
++        "sleep",
++        "wake",
++        "audionext",
++        "audioprev",
++        "audiostop",
++        "audioplay",
++        "audiomute",
++        "volumeup",
++        "volumedown",
++        "mediaselect",
++        "mail",
++        "calculator",
++        "computer",
++        "ac_home",
++        "ac_back",
++        "ac_forward",
++        "ac_refresh",
++        "ac_bookmarks"
++      ]
++    },
++    {
++      "name": "467",
++      "members": [
++        {
++          "name": "key",
++          "type": "289"
++        },
++        {
++          "name": "down",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "468",
++      "members": [
++        {
++          "name": "button",
++          "type": "481"
++        },
++        {
++          "name": "down",
++          "type": "bool"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "469",
++      "members": [
++        {
++          "name": "axis",
++          "type": "482"
++        },
++        {
++          "name": "value",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "470",
++      "members": [
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "471",
++      "members": [
++        {
++          "name": "number",
++          "type": "int"
++        },
++        {
++          "name": "secondary",
++          "type": "int"
++        },
++        {
++          "name": "subordinate",
++          "type": "int"
++        },
++        {
++          "name": "io_range",
++          "type": "483"
++        },
++        {
++          "name": "memory_range",
++          "type": "483"
++        },
++        {
++          "name": "prefetchable_range",
++          "type": "483"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "472",
++      "members": [
++        {
++          "name": "compat",
++          "type": "str"
++        },
++        {
++          "name": "lazy-refcounts",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "corrupt",
++          "default": null,
++          "type": "bool"
++        },
++        {
++          "name": "refcount-bits",
++          "type": "int"
++        },
++        {
++          "name": "encrypt",
++          "default": null,
++          "type": "484"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "473",
++      "members": [
++        {
++          "name": "create-type",
++          "type": "str"
++        },
++        {
++          "name": "cid",
++          "type": "int"
++        },
++        {
++          "name": "parent-cid",
++          "type": "int"
++        },
++        {
++          "name": "extents",
++          "type": "[227]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "474",
++      "members": [
++        {
++          "name": "cipher-alg",
++          "type": "444"
++        },
++        {
++          "name": "cipher-mode",
++          "type": "445"
++        },
++        {
++          "name": "ivgen-alg",
++          "type": "446"
++        },
++        {
++          "name": "ivgen-hash-alg",
++          "default": null,
++          "type": "447"
++        },
++        {
++          "name": "hash-alg",
++          "type": "447"
++        },
++        {
++          "name": "payload-offset",
++          "type": "int"
++        },
++        {
++          "name": "master-key-iters",
++          "type": "int"
++        },
++        {
++          "name": "uuid",
++          "type": "str"
++        },
++        {
++          "name": "slots",
++          "type": "[485]"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "475",
++      "meta-type": "enum",
++      "values": [
++        "md5",
++        "sha1"
++      ]
++    },
++    {
++      "name": "476",
++      "meta-type": "enum",
++      "values": [
++        "qcow",
++        "luks"
++      ]
++    },
++    {
++      "name": "477",
++      "members": [
++        {
++          "name": "key-secret",
++          "default": null,
++          "type": "str"
++        },
++        {
++          "name": "cipher-alg",
++          "default": null,
++          "type": "444"
++        },
++        {
++          "name": "cipher-mode",
++          "default": null,
++          "type": "445"
++        },
++        {
++          "name": "ivgen-alg",
++          "default": null,
++          "type": "446"
++        },
++        {
++          "name": "ivgen-hash-alg",
++          "default": null,
++          "type": "447"
++        },
++        {
++          "name": "hash-alg",
++          "default": null,
++          "type": "447"
++        },
++        {
++          "name": "iter-time",
++          "default": null,
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "478",
++      "meta-type": "enum",
++      "values": [
++        "full",
++        "erasure-coded"
++      ]
++    },
++    {
++      "name": "479",
++      "members": [
++        {
++          "name": "copies",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "480",
++      "members": [
++        {
++          "name": "data-strips",
++          "type": "int"
++        },
++        {
++          "name": "parity-strips",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "481",
++      "meta-type": "enum",
++      "values": [
++        "left",
++        "middle",
++        "right",
++        "wheel-up",
++        "wheel-down",
++        "side",
++        "extra"
++      ]
++    },
++    {
++      "name": "482",
++      "meta-type": "enum",
++      "values": [
++        "x",
++        "y"
++      ]
++    },
++    {
++      "name": "483",
++      "members": [
++        {
++          "name": "base",
++          "type": "int"
++        },
++        {
++          "name": "limit",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "484",
++      "tag": "format",
++      "variants": [
++        {
++          "case": "luks",
++          "type": "474"
++        },
++        {
++          "case": "aes",
++          "type": "0"
++        }
++      ],
++      "members": [
++        {
++          "name": "format",
++          "type": "437"
++        }
++      ],
++      "meta-type": "object"
++    },
++    {
++      "name": "[227]",
++      "element-type": "227",
++      "meta-type": "array"
++    },
++    {
++      "name": "[485]",
++      "element-type": "485",
++      "meta-type": "array"
++    },
++    {
++      "name": "485",
++      "members": [
++        {
++          "name": "active",
++          "type": "bool"
++        },
++        {
++          "name": "iters",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "stripes",
++          "default": null,
++          "type": "int"
++        },
++        {
++          "name": "key-offset",
++          "type": "int"
++        }
++      ],
++      "meta-type": "object"
++    }
++  ],
++  "id": "libvirt-49"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "static",
++    "model": {
++      "name": "host"
++    }
++  },
++  "id": "libvirt-50"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": true,
++        "intel-pt": false,
++        "kvm-asyncpf": true,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "avx512vbmi2": false,
++        "cr8legacy": false,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": true,
++        "3dnowext": false,
++        "amd-no-ssb": false,
++        "npt": false,
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "pcommit": false,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": false,
++        "invtsc": false,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "cldemote": false,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "avx512bitalg": false,
++        "pdcm": false,
++        "model": 94,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "spec-ctrl": false,
++        "tsc-adjust": true,
++        "kvm-steal-time": true,
++        "kvmclock": true,
++        "lwp": false,
++        "amd-ssbd": false,
++        "xop": false,
++        "ibpb": false,
++        "avx": true,
++        "acpi": false,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "popcnt": true,
++        "vaes": false,
++        "xsaves": true,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "virt-ssbd": false,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": true,
++        "tsc-scale": false,
++        "topoext": true,
++        "clflushopt": true,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": true,
++        "kvm-hint-dedicated": false,
++        "lmce": true,
++        "perfctr-nb": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vme": true,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-50"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "full",
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": true,
++        "intel-pt": false,
++        "kvm-asyncpf": true,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "avx512vbmi2": false,
++        "cr8legacy": false,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": true,
++        "3dnowext": false,
++        "amd-no-ssb": false,
++        "npt": false,
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "pcommit": false,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": false,
++        "invtsc": false,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "cldemote": false,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "avx512bitalg": false,
++        "pdcm": false,
++        "model": 94,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "spec-ctrl": false,
++        "tsc-adjust": true,
++        "kvm-steal-time": true,
++        "kvmclock": true,
++        "lwp": false,
++        "amd-ssbd": false,
++        "xop": false,
++        "ibpb": false,
++        "avx": true,
++        "acpi": false,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "popcnt": true,
++        "vaes": false,
++        "xsaves": true,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "virt-ssbd": false,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": true,
++        "tsc-scale": false,
++        "topoext": true,
++        "clflushopt": true,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": true,
++        "kvm-hint-dedicated": false,
++        "lmce": true,
++        "perfctr-nb": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vme": true,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-51"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "phys-bits": 0,
++        "core-id": -1,
++        "xlevel": 2147483656,
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": true,
++        "intel-pt": false,
++        "hv-frequencies": false,
++        "tsc-frequency": 0,
++        "xd": true,
++        "hv-vendor-id": "",
++        "kvm-asyncpf": true,
++        "kvm_asyncpf": true,
++        "perfctr_core": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "decodeassists": false,
++        "avx512cd": false,
++        "sse4_1": true,
++        "sse4.1": true,
++        "sse4-1": true,
++        "family": 6,
++        "legacy-cache": true,
++        "vmware-cpuid-freq": true,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "hv-runtime": false,
++        "xcrypt": false,
++        "thread-id": -1,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "hv-relaxed": false,
++        "hv-crash": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "avx512vbmi2": false,
++        "cr8legacy": false,
++        "cpuid-0xb": true,
++        "xcrypt-en": false,
++        "kvm_pv_eoi": true,
++        "apic-id": 4294967295,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp_legacy": false,
++        "cmp-legacy": false,
++        "node-id": -1,
++        "avx512-4fmaps": false,
++        "vmcb_clean": false,
++        "vmcb-clean": false,
++        "3dnowext": false,
++        "amd-no-ssb": false,
++        "hle": true,
++        "npt": false,
++        "memory": "/machine/unattached/system[0]",
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm_lock": false,
++        "svm-lock": false,
++        "pfthreshold": false,
++        "smep": true,
++        "smap": true,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "hv-stimer": false,
++        "i64": true,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pat": true,
++        "pae": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm_nopiodelay": true,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "socket-id": -1,
++        "pcommit": false,
++        "syscall": true,
++        "level": 13,
++        "avx512dq": false,
++        "svm": false,
++        "full-cpuid-auto-level": true,
++        "hv-reset": false,
++        "invtsc": false,
++        "sse3": true,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "cldemote": false,
++        "hv-reenlightenment": false,
++        "kvm_mmu": false,
++        "kvm-mmu": false,
++        "sse4_2": true,
++        "sse4.2": true,
++        "sse4-2": true,
++        "pge": true,
++        "fill-mtrr-mask": true,
++        "avx512bitalg": false,
++        "nodeid_msr": false,
++        "pdcm": false,
++        "movbe": true,
++        "model": 94,
++        "nrip_save": false,
++        "nrip-save": false,
++        "kvm_pv_unhalt": true,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "enforce": false,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ibs": false,
++        "ds_cpl": false,
++        "ds-cpl": false,
++        "host-phys-bits": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "check": true,
++        "hv-spinlocks": -1,
++        "pmu": false,
++        "pmm": false,
++        "apic": true,
++        "spec-ctrl": false,
++        "min-xlevel2": 0,
++        "tsc-adjust": true,
++        "tsc_adjust": true,
++        "kvm-steal-time": true,
++        "kvm_steal_time": true,
++        "kvmclock": true,
++        "l3-cache": true,
++        "lwp": false,
++        "amd-ssbd": false,
++        "ibpb": false,
++        "xop": false,
++        "avx": true,
++        "ace2": false,
++        "avx512bw": false,
++        "acpi": false,
++        "hv-vapic": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "vaes": false,
++        "popcnt": true,
++        "xsaves": true,
++        "tcg-cpuid": true,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "pclmuldq": true,
++        "virt-ssbd": false,
++        "x-hv-max-vps": -1,
++        "nodeid-msr": false,
++        "kvm": true,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "kvm-pv-unhalt": true,
++        "bmi2": true,
++        "bmi1": true,
++        "realized": false,
++        "tsc_scale": false,
++        "tsc-scale": false,
++        "topoext": true,
++        "hv-vpindex": false,
++        "xlevel2": 0,
++        "clflushopt": true,
++        "kvm-no-smi-migration": false,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "lahf_lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "hv-synic": false,
++        "xstore": false,
++        "fxsr_opt": false,
++        "kvm-hint-dedicated": false,
++        "rtm": true,
++        "lmce": true,
++        "hv-time": false,
++        "perfctr-nb": false,
++        "perfctr_nb": false,
++        "ffxsr": false,
++        "hv-tlbflush": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vmx": false,
++        "vme": true,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "pause_filter": false,
++        "sha-ni": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-51"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "static",
++    "model": {
++      "name": "host",
++      "props": {
++        "migratable": false
++      }
++    }
++  },
++  "id": "libvirt-52"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": true,
++        "intel-pt": false,
++        "kvm-asyncpf": true,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "avx512vbmi2": false,
++        "cr8legacy": false,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": true,
++        "3dnowext": false,
++        "amd-no-ssb": false,
++        "npt": false,
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "pcommit": false,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": false,
++        "invtsc": true,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "cldemote": false,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "avx512bitalg": false,
++        "pdcm": false,
++        "model": 94,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "spec-ctrl": false,
++        "tsc-adjust": true,
++        "kvm-steal-time": true,
++        "kvmclock": true,
++        "lwp": false,
++        "amd-ssbd": false,
++        "xop": false,
++        "ibpb": false,
++        "avx": true,
++        "acpi": false,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "popcnt": true,
++        "vaes": false,
++        "xsaves": true,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "virt-ssbd": false,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": true,
++        "tsc-scale": false,
++        "topoext": true,
++        "clflushopt": true,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": true,
++        "kvm-hint-dedicated": false,
++        "lmce": true,
++        "perfctr-nb": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vme": true,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-52"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "full",
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": true,
++        "intel-pt": false,
++        "kvm-asyncpf": true,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "avx512vbmi2": false,
++        "cr8legacy": false,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": true,
++        "3dnowext": false,
++        "amd-no-ssb": false,
++        "npt": false,
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "pcommit": false,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": false,
++        "invtsc": true,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "cldemote": false,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "avx512bitalg": false,
++        "pdcm": false,
++        "model": 94,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "spec-ctrl": false,
++        "tsc-adjust": true,
++        "kvm-steal-time": true,
++        "kvmclock": true,
++        "lwp": false,
++        "amd-ssbd": false,
++        "xop": false,
++        "ibpb": false,
++        "avx": true,
++        "acpi": false,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "popcnt": true,
++        "vaes": false,
++        "xsaves": true,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "virt-ssbd": false,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": true,
++        "tsc-scale": false,
++        "topoext": true,
++        "clflushopt": true,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": true,
++        "kvm-hint-dedicated": false,
++        "lmce": true,
++        "perfctr-nb": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vme": true,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-53"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "phys-bits": 0,
++        "core-id": -1,
++        "xlevel": 2147483656,
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": true,
++        "intel-pt": false,
++        "hv-frequencies": false,
++        "tsc-frequency": 0,
++        "xd": true,
++        "hv-vendor-id": "",
++        "kvm-asyncpf": true,
++        "kvm_asyncpf": true,
++        "perfctr_core": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "decodeassists": false,
++        "avx512cd": false,
++        "sse4_1": true,
++        "sse4.1": true,
++        "sse4-1": true,
++        "family": 6,
++        "legacy-cache": true,
++        "vmware-cpuid-freq": true,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "hv-runtime": false,
++        "xcrypt": false,
++        "thread-id": -1,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "hv-relaxed": false,
++        "hv-crash": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": true,
++        "avx512vbmi2": false,
++        "cr8legacy": false,
++        "cpuid-0xb": true,
++        "xcrypt-en": false,
++        "kvm_pv_eoi": true,
++        "apic-id": 4294967295,
++        "pn": false,
++        "dca": false,
++        "vendor": "GenuineIntel",
++        "pku": false,
++        "smx": false,
++        "cmp_legacy": false,
++        "cmp-legacy": false,
++        "node-id": -1,
++        "avx512-4fmaps": false,
++        "vmcb_clean": false,
++        "vmcb-clean": false,
++        "3dnowext": false,
++        "amd-no-ssb": false,
++        "hle": true,
++        "npt": false,
++        "memory": "/machine/unattached/system[0]",
++        "clwb": false,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm_lock": false,
++        "svm-lock": false,
++        "pfthreshold": false,
++        "smep": true,
++        "smap": true,
++        "x2apic": true,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "hv-stimer": false,
++        "i64": true,
++        "flushbyasid": false,
++        "f16c": true,
++        "ace2-en": false,
++        "pat": true,
++        "pae": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm_nopiodelay": true,
++        "kvm-nopiodelay": true,
++        "tm": false,
++        "kvmclock-stable-bit": true,
++        "hypervisor": true,
++        "socket-id": -1,
++        "pcommit": false,
++        "syscall": true,
++        "level": 13,
++        "avx512dq": false,
++        "svm": false,
++        "full-cpuid-auto-level": true,
++        "hv-reset": false,
++        "invtsc": true,
++        "sse3": true,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": true,
++        "cx8": true,
++        "cldemote": false,
++        "hv-reenlightenment": false,
++        "kvm_mmu": false,
++        "kvm-mmu": false,
++        "sse4_2": true,
++        "sse4.2": true,
++        "sse4-2": true,
++        "pge": true,
++        "fill-mtrr-mask": true,
++        "avx512bitalg": false,
++        "nodeid_msr": false,
++        "pdcm": false,
++        "movbe": true,
++        "model": 94,
++        "nrip_save": false,
++        "nrip-save": false,
++        "kvm_pv_unhalt": true,
++        "ssse3": true,
++        "sse4a": false,
++        "invpcid": true,
++        "pdpe1gb": true,
++        "tsc-deadline": true,
++        "fma": true,
++        "cx16": true,
++        "de": true,
++        "enforce": false,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ibs": false,
++        "ds_cpl": false,
++        "ds-cpl": false,
++        "host-phys-bits": false,
++        "fma4": false,
++        "la57": false,
++        "osvw": false,
++        "check": true,
++        "hv-spinlocks": -1,
++        "pmu": false,
++        "pmm": false,
++        "apic": true,
++        "spec-ctrl": false,
++        "min-xlevel2": 0,
++        "tsc-adjust": true,
++        "tsc_adjust": true,
++        "kvm-steal-time": true,
++        "kvm_steal_time": true,
++        "kvmclock": true,
++        "l3-cache": true,
++        "lwp": false,
++        "amd-ssbd": false,
++        "ibpb": false,
++        "xop": false,
++        "avx": true,
++        "ace2": false,
++        "avx512bw": false,
++        "acpi": false,
++        "hv-vapic": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": false,
++        "vaes": false,
++        "popcnt": true,
++        "xsaves": true,
++        "tcg-cpuid": true,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": true,
++        "sep": true,
++        "pclmuldq": true,
++        "virt-ssbd": false,
++        "x-hv-max-vps": -1,
++        "nodeid-msr": false,
++        "kvm": true,
++        "misalignsse": false,
++        "min-xlevel": 2147483656,
++        "kvm-pv-unhalt": true,
++        "bmi2": true,
++        "bmi1": true,
++        "realized": false,
++        "tsc_scale": false,
++        "tsc-scale": false,
++        "topoext": true,
++        "hv-vpindex": false,
++        "xlevel2": 0,
++        "clflushopt": true,
++        "kvm-no-smi-migration": false,
++        "monitor": false,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": true,
++        "3dnow": false,
++        "erms": true,
++        "lahf-lm": true,
++        "lahf_lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "hv-synic": false,
++        "xstore": false,
++        "fxsr_opt": false,
++        "kvm-hint-dedicated": false,
++        "rtm": true,
++        "lmce": true,
++        "hv-time": false,
++        "perfctr-nb": false,
++        "perfctr_nb": false,
++        "ffxsr": false,
++        "hv-tlbflush": false,
++        "rdrand": true,
++        "rdseed": true,
++        "avx512-4vnniw": false,
++        "vmx": false,
++        "vme": true,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "pause_filter": false,
++        "sha-ni": false,
++        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-53"
++}
++
++{
++  "execute": "query-sev-capabilities",
++  "id": "libvirt-54"
++}
++
++{
++  "id": "libvirt-54",
++  "error": {
++    "class": "GenericError",
++    "desc": "SEV feature is not available"
++  }
++}
++
++{
++  "execute": "qmp_capabilities",
++  "id": "libvirt-1"
++}
++
++{
++  "return": {
++  },
++  "id": "libvirt-1"
++}
++
++{
++  "execute": "query-cpu-definitions",
++  "id": "libvirt-2"
++}
++
++{
++  "return": [
++    {
++      "name": "max",
++      "typename": "max-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": false
++    },
++    {
++      "name": "host",
++      "typename": "host-x86_64-cpu",
++      "unavailable-features": [
++        "kvm"
++      ],
++      "static": false,
++      "migration-safe": false
++    },
++    {
++      "name": "base",
++      "typename": "base-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": true,
++      "migration-safe": true
++    },
++    {
++      "name": "qemu64",
++      "typename": "qemu64-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "qemu32",
++      "typename": "qemu32-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "phenom",
++      "typename": "phenom-x86_64-cpu",
++      "unavailable-features": [
++        "fxsr-opt"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium3",
++      "typename": "pentium3-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium2",
++      "typename": "pentium2-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "pentium",
++      "typename": "pentium-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "n270",
++      "typename": "n270-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "kvm64",
++      "typename": "kvm64-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "kvm32",
++      "typename": "kvm32-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "coreduo",
++      "typename": "coreduo-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "core2duo",
++      "typename": "core2duo-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "athlon",
++      "typename": "athlon-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Westmere-IBRS",
++      "typename": "Westmere-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Westmere",
++      "typename": "Westmere-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Server-IBRS",
++      "typename": "Skylake-Server-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm",
++        "avx512f",
++        "avx512dq",
++        "rdseed",
++        "avx512cd",
++        "avx512bw",
++        "avx512vl",
++        "spec-ctrl",
++        "3dnowprefetch",
++        "xsavec"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Server",
++      "typename": "Skylake-Server-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm",
++        "avx512f",
++        "avx512dq",
++        "rdseed",
++        "avx512cd",
++        "avx512bw",
++        "avx512vl",
++        "3dnowprefetch",
++        "xsavec"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Client-IBRS",
++      "typename": "Skylake-Client-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm",
++        "rdseed",
++        "spec-ctrl",
++        "3dnowprefetch",
++        "xsavec"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Skylake-Client",
++      "typename": "Skylake-Client-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm",
++        "rdseed",
++        "3dnowprefetch",
++        "xsavec"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "SandyBridge-IBRS",
++      "typename": "SandyBridge-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "SandyBridge",
++      "typename": "SandyBridge-x86_64-cpu",
++      "unavailable-features": [
++        "x2apic",
++        "tsc-deadline",
++        "avx"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Penryn",
++      "typename": "Penryn-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G5",
++      "typename": "Opteron_G5-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "avx",
++        "f16c",
++        "misalignsse",
++        "3dnowprefetch",
++        "xop",
++        "fma4",
++        "tbm"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G4",
++      "typename": "Opteron_G4-x86_64-cpu",
++      "unavailable-features": [
++        "avx",
++        "misalignsse",
++        "3dnowprefetch",
++        "xop",
++        "fma4"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G3",
++      "typename": "Opteron_G3-x86_64-cpu",
++      "unavailable-features": [
++        "misalignsse"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G2",
++      "typename": "Opteron_G2-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Opteron_G1",
++      "typename": "Opteron_G1-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Nehalem-IBRS",
++      "typename": "Nehalem-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Nehalem",
++      "typename": "Nehalem-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "KnightsMill",
++      "typename": "KnightsMill-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "avx2",
++        "avx512f",
++        "rdseed",
++        "avx512pf",
++        "avx512er",
++        "avx512cd",
++        "avx512-vpopcntdq",
++        "avx512-4vnniw",
++        "avx512-4fmaps",
++        "3dnowprefetch"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "IvyBridge-IBRS",
++      "typename": "IvyBridge-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "IvyBridge",
++      "typename": "IvyBridge-x86_64-cpu",
++      "unavailable-features": [
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell-noTSX-IBRS",
++      "typename": "Haswell-noTSX-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "avx2",
++        "invpcid",
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell-noTSX",
++      "typename": "Haswell-noTSX-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "avx2",
++        "invpcid"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell-IBRS",
++      "typename": "Haswell-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm",
++        "spec-ctrl"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Haswell",
++      "typename": "Haswell-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "EPYC-IBPB",
++      "typename": "EPYC-IBPB-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "avx",
++        "f16c",
++        "rdrand",
++        "avx2",
++        "rdseed",
++        "sha-ni",
++        "fxsr-opt",
++        "misalignsse",
++        "3dnowprefetch",
++        "osvw",
++        "topoext",
++        "ibpb",
++        "xsavec"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "EPYC",
++      "typename": "EPYC-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "avx",
++        "f16c",
++        "rdrand",
++        "avx2",
++        "rdseed",
++        "sha-ni",
++        "fxsr-opt",
++        "misalignsse",
++        "3dnowprefetch",
++        "osvw",
++        "topoext",
++        "xsavec"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Conroe",
++      "typename": "Conroe-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell-noTSX-IBRS",
++      "typename": "Broadwell-noTSX-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "avx2",
++        "invpcid",
++        "rdseed",
++        "spec-ctrl",
++        "3dnowprefetch"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell-noTSX",
++      "typename": "Broadwell-noTSX-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "avx2",
++        "invpcid",
++        "rdseed",
++        "3dnowprefetch"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell-IBRS",
++      "typename": "Broadwell-IBRS-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm",
++        "rdseed",
++        "spec-ctrl",
++        "3dnowprefetch"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "Broadwell",
++      "typename": "Broadwell-x86_64-cpu",
++      "unavailable-features": [
++        "fma",
++        "pcid",
++        "x2apic",
++        "tsc-deadline",
++        "avx",
++        "f16c",
++        "rdrand",
++        "hle",
++        "avx2",
++        "invpcid",
++        "rtm",
++        "rdseed",
++        "3dnowprefetch"
++      ],
++      "static": false,
++      "migration-safe": true
++    },
++    {
++      "name": "486",
++      "typename": "486-x86_64-cpu",
++      "unavailable-features": [
++      ],
++      "static": false,
++      "migration-safe": true
++    }
++  ],
++  "id": "libvirt-2"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "static",
++    "model": {
++      "name": "max"
++    }
++  },
++  "id": "libvirt-3"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": false,
++        "intel-pt": false,
++        "kvm-asyncpf": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "avx512vbmi2": false,
++        "cr8legacy": true,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": false,
++        "3dnowext": true,
++        "amd-no-ssb": false,
++        "npt": true,
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "pcommit": true,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": true,
++        "invtsc": false,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "cldemote": false,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "avx512bitalg": false,
++        "pdcm": false,
++        "model": 6,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "spec-ctrl": false,
++        "tsc-adjust": false,
++        "kvm-steal-time": false,
++        "kvmclock": false,
++        "lwp": false,
++        "amd-ssbd": false,
++        "xop": false,
++        "ibpb": false,
++        "avx": false,
++        "acpi": true,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "popcnt": true,
++        "vaes": false,
++        "xsaves": false,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "virt-ssbd": false,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": false,
++        "kvm-hint-dedicated": false,
++        "lmce": false,
++        "perfctr-nb": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vme": false,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-3"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "full",
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": false,
++        "intel-pt": false,
++        "kvm-asyncpf": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "avx512vbmi2": false,
++        "cr8legacy": true,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": false,
++        "3dnowext": true,
++        "amd-no-ssb": false,
++        "npt": true,
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "pcommit": true,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": true,
++        "invtsc": false,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "cldemote": false,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "avx512bitalg": false,
++        "pdcm": false,
++        "model": 6,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "spec-ctrl": false,
++        "tsc-adjust": false,
++        "kvm-steal-time": false,
++        "kvmclock": false,
++        "lwp": false,
++        "amd-ssbd": false,
++        "xop": false,
++        "ibpb": false,
++        "avx": false,
++        "acpi": true,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "popcnt": true,
++        "vaes": false,
++        "xsaves": false,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "virt-ssbd": false,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": false,
++        "kvm-hint-dedicated": false,
++        "lmce": false,
++        "perfctr-nb": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vme": false,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-4"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "phys-bits": 0,
++        "core-id": -1,
++        "xlevel": 2147483658,
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": false,
++        "intel-pt": false,
++        "hv-frequencies": false,
++        "tsc-frequency": 0,
++        "xd": true,
++        "hv-vendor-id": "",
++        "kvm-asyncpf": false,
++        "kvm_asyncpf": false,
++        "perfctr_core": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "decodeassists": false,
++        "avx512cd": false,
++        "sse4_1": true,
++        "sse4.1": true,
++        "sse4-1": true,
++        "family": 6,
++        "legacy-cache": true,
++        "vmware-cpuid-freq": true,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "hv-runtime": false,
++        "xcrypt": false,
++        "thread-id": -1,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "hv-relaxed": false,
++        "hv-crash": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "avx512vbmi2": false,
++        "cr8legacy": true,
++        "cpuid-0xb": true,
++        "xcrypt-en": false,
++        "kvm_pv_eoi": false,
++        "apic-id": 4294967295,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp_legacy": false,
++        "cmp-legacy": false,
++        "node-id": -1,
++        "avx512-4fmaps": false,
++        "vmcb_clean": false,
++        "vmcb-clean": false,
++        "3dnowext": true,
++        "amd-no-ssb": false,
++        "hle": false,
++        "npt": true,
++        "memory": "/machine/unattached/system[0]",
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm_lock": false,
++        "svm-lock": false,
++        "pfthreshold": false,
++        "smep": true,
++        "smap": true,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "hv-stimer": false,
++        "i64": true,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pat": true,
++        "pae": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm_nopiodelay": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "socket-id": -1,
++        "pcommit": true,
++        "syscall": true,
++        "level": 13,
++        "avx512dq": false,
++        "svm": true,
++        "full-cpuid-auto-level": true,
++        "hv-reset": false,
++        "invtsc": false,
++        "sse3": true,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "cldemote": false,
++        "hv-reenlightenment": false,
++        "kvm_mmu": false,
++        "kvm-mmu": false,
++        "sse4_2": true,
++        "sse4.2": true,
++        "sse4-2": true,
++        "pge": true,
++        "fill-mtrr-mask": true,
++        "avx512bitalg": false,
++        "nodeid_msr": false,
++        "pdcm": false,
++        "movbe": true,
++        "model": 6,
++        "nrip_save": false,
++        "nrip-save": false,
++        "kvm_pv_unhalt": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "enforce": false,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ibs": false,
++        "ds_cpl": false,
++        "ds-cpl": false,
++        "host-phys-bits": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "check": true,
++        "hv-spinlocks": -1,
++        "pmu": false,
++        "pmm": false,
++        "apic": true,
++        "spec-ctrl": false,
++        "min-xlevel2": 0,
++        "tsc-adjust": false,
++        "tsc_adjust": false,
++        "kvm-steal-time": false,
++        "kvm_steal_time": false,
++        "kvmclock": false,
++        "l3-cache": true,
++        "lwp": false,
++        "amd-ssbd": false,
++        "ibpb": false,
++        "xop": false,
++        "avx": false,
++        "ace2": false,
++        "avx512bw": false,
++        "acpi": true,
++        "hv-vapic": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "vaes": false,
++        "popcnt": true,
++        "xsaves": false,
++        "tcg-cpuid": true,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "pclmuldq": true,
++        "virt-ssbd": false,
++        "x-hv-max-vps": -1,
++        "nodeid-msr": false,
++        "kvm": true,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "kvm-pv-unhalt": false,
++        "bmi2": true,
++        "bmi1": true,
++        "realized": false,
++        "tsc_scale": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "hv-vpindex": false,
++        "xlevel2": 0,
++        "clflushopt": true,
++        "kvm-no-smi-migration": false,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "lahf_lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "hv-synic": false,
++        "xstore": false,
++        "fxsr_opt": false,
++        "kvm-hint-dedicated": false,
++        "rtm": false,
++        "lmce": false,
++        "hv-time": false,
++        "perfctr-nb": false,
++        "perfctr_nb": false,
++        "ffxsr": false,
++        "hv-tlbflush": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vmx": false,
++        "vme": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "pause_filter": false,
++        "sha-ni": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-4"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "static",
++    "model": {
++      "name": "max",
++      "props": {
++        "migratable": false
++      }
++    }
++  },
++  "id": "libvirt-5"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": false,
++        "intel-pt": false,
++        "kvm-asyncpf": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "avx512vbmi2": false,
++        "cr8legacy": true,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": false,
++        "3dnowext": true,
++        "amd-no-ssb": false,
++        "npt": true,
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "pcommit": true,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": true,
++        "invtsc": false,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "cldemote": false,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "avx512bitalg": false,
++        "pdcm": false,
++        "model": 6,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "spec-ctrl": false,
++        "tsc-adjust": false,
++        "kvm-steal-time": false,
++        "kvmclock": false,
++        "lwp": false,
++        "amd-ssbd": false,
++        "xop": false,
++        "ibpb": false,
++        "avx": false,
++        "acpi": true,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "popcnt": true,
++        "vaes": false,
++        "xsaves": false,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "virt-ssbd": false,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": false,
++        "kvm-hint-dedicated": false,
++        "lmce": false,
++        "perfctr-nb": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vme": false,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-5"
++}
++
++{
++  "execute": "query-cpu-model-expansion",
++  "arguments": {
++    "type": "full",
++    "model": {
++      "name": "base",
++      "props": {
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": false,
++        "intel-pt": false,
++        "kvm-asyncpf": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "avx512cd": false,
++        "decodeassists": false,
++        "sse4.1": true,
++        "family": 6,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "xcrypt": false,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "avx512vbmi2": false,
++        "cr8legacy": true,
++        "xcrypt-en": false,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp-legacy": false,
++        "avx512-4fmaps": false,
++        "vmcb-clean": false,
++        "hle": false,
++        "3dnowext": true,
++        "amd-no-ssb": false,
++        "npt": true,
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm-lock": false,
++        "smep": true,
++        "smap": true,
++        "pfthreshold": false,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pae": true,
++        "pat": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "pcommit": true,
++        "syscall": true,
++        "avx512dq": false,
++        "svm": true,
++        "invtsc": false,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "cldemote": false,
++        "kvm-mmu": false,
++        "sse4.2": true,
++        "pge": true,
++        "avx512bitalg": false,
++        "pdcm": false,
++        "model": 6,
++        "movbe": true,
++        "nrip-save": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ds-cpl": false,
++        "ibs": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "apic": true,
++        "pmm": false,
++        "spec-ctrl": false,
++        "tsc-adjust": false,
++        "kvm-steal-time": false,
++        "kvmclock": false,
++        "lwp": false,
++        "amd-ssbd": false,
++        "xop": false,
++        "ibpb": false,
++        "avx": false,
++        "acpi": true,
++        "avx512bw": false,
++        "ace2": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "popcnt": true,
++        "vaes": false,
++        "xsaves": false,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "virt-ssbd": false,
++        "nodeid-msr": false,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "bmi1": true,
++        "bmi2": true,
++        "kvm-pv-unhalt": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "clflushopt": true,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "xstore": false,
++        "rtm": false,
++        "kvm-hint-dedicated": false,
++        "lmce": false,
++        "perfctr-nb": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vme": false,
++        "vmx": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "sha-ni": false,
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-6"
++}
++
++{
++  "return": {
++    "model": {
++      "name": "base",
++      "props": {
++        "phys-bits": 0,
++        "core-id": -1,
++        "xlevel": 2147483658,
++        "cmov": true,
++        "ia64": false,
++        "aes": true,
++        "mmx": true,
++        "rdpid": false,
++        "arat": true,
++        "gfni": false,
++        "pause-filter": false,
++        "xsavec": false,
++        "intel-pt": false,
++        "hv-frequencies": false,
++        "tsc-frequency": 0,
++        "xd": true,
++        "hv-vendor-id": "",
++        "kvm-asyncpf": false,
++        "kvm_asyncpf": false,
++        "perfctr_core": false,
++        "perfctr-core": false,
++        "mpx": true,
++        "pbe": false,
++        "decodeassists": false,
++        "avx512cd": false,
++        "sse4_1": true,
++        "sse4.1": true,
++        "sse4-1": true,
++        "family": 6,
++        "legacy-cache": true,
++        "vmware-cpuid-freq": true,
++        "avx512f": false,
++        "msr": true,
++        "mce": true,
++        "mca": true,
++        "hv-runtime": false,
++        "xcrypt": false,
++        "thread-id": -1,
++        "min-level": 13,
++        "xgetbv1": true,
++        "cid": false,
++        "hv-relaxed": false,
++        "hv-crash": false,
++        "ds": false,
++        "fxsr": true,
++        "xsaveopt": true,
++        "xtpr": false,
++        "avx512vl": false,
++        "avx512-vpopcntdq": false,
++        "phe": false,
++        "extapic": false,
++        "3dnowprefetch": false,
++        "avx512vbmi2": false,
++        "cr8legacy": true,
++        "cpuid-0xb": true,
++        "xcrypt-en": false,
++        "kvm_pv_eoi": false,
++        "apic-id": 4294967295,
++        "pn": false,
++        "dca": false,
++        "vendor": "AuthenticAMD",
++        "pku": true,
++        "smx": false,
++        "cmp_legacy": false,
++        "cmp-legacy": false,
++        "node-id": -1,
++        "avx512-4fmaps": false,
++        "vmcb_clean": false,
++        "vmcb-clean": false,
++        "3dnowext": true,
++        "amd-no-ssb": false,
++        "hle": false,
++        "npt": true,
++        "memory": "/machine/unattached/system[0]",
++        "clwb": true,
++        "lbrv": false,
++        "adx": true,
++        "ss": true,
++        "pni": true,
++        "svm_lock": false,
++        "svm-lock": false,
++        "pfthreshold": false,
++        "smep": true,
++        "smap": true,
++        "x2apic": false,
++        "avx512vbmi": false,
++        "avx512vnni": false,
++        "hv-stimer": false,
++        "i64": true,
++        "flushbyasid": false,
++        "f16c": false,
++        "ace2-en": false,
++        "pat": true,
++        "pae": true,
++        "sse": true,
++        "phe-en": false,
++        "kvm_nopiodelay": false,
++        "kvm-nopiodelay": false,
++        "tm": false,
++        "kvmclock-stable-bit": false,
++        "hypervisor": true,
++        "socket-id": -1,
++        "pcommit": true,
++        "syscall": true,
++        "level": 13,
++        "avx512dq": false,
++        "svm": true,
++        "full-cpuid-auto-level": true,
++        "hv-reset": false,
++        "invtsc": false,
++        "sse3": true,
++        "sse2": true,
++        "ssbd": false,
++        "est": false,
++        "avx512ifma": false,
++        "tm2": false,
++        "kvm-pv-eoi": false,
++        "cx8": true,
++        "cldemote": false,
++        "hv-reenlightenment": false,
++        "kvm_mmu": false,
++        "kvm-mmu": false,
++        "sse4_2": true,
++        "sse4.2": true,
++        "sse4-2": true,
++        "pge": true,
++        "fill-mtrr-mask": true,
++        "avx512bitalg": false,
++        "nodeid_msr": false,
++        "pdcm": false,
++        "movbe": true,
++        "model": 6,
++        "nrip_save": false,
++        "nrip-save": false,
++        "kvm_pv_unhalt": false,
++        "ssse3": true,
++        "sse4a": true,
++        "invpcid": false,
++        "pdpe1gb": true,
++        "tsc-deadline": false,
++        "fma": false,
++        "cx16": true,
++        "de": true,
++        "enforce": false,
++        "stepping": 3,
++        "xsave": true,
++        "clflush": true,
++        "skinit": false,
++        "tsc": true,
++        "tce": false,
++        "fpu": true,
++        "ibs": false,
++        "ds_cpl": false,
++        "ds-cpl": false,
++        "host-phys-bits": false,
++        "fma4": false,
++        "la57": true,
++        "osvw": false,
++        "check": true,
++        "hv-spinlocks": -1,
++        "pmu": false,
++        "pmm": false,
++        "apic": true,
++        "spec-ctrl": false,
++        "min-xlevel2": 0,
++        "tsc-adjust": false,
++        "tsc_adjust": false,
++        "kvm-steal-time": false,
++        "kvm_steal_time": false,
++        "kvmclock": false,
++        "l3-cache": true,
++        "lwp": false,
++        "amd-ssbd": false,
++        "ibpb": false,
++        "xop": false,
++        "avx": false,
++        "ace2": false,
++        "avx512bw": false,
++        "acpi": true,
++        "hv-vapic": false,
++        "fsgsbase": true,
++        "ht": false,
++        "nx": true,
++        "pclmulqdq": true,
++        "mmxext": true,
++        "vaes": false,
++        "popcnt": true,
++        "xsaves": false,
++        "tcg-cpuid": true,
++        "lm": true,
++        "umip": false,
++        "pse": true,
++        "avx2": false,
++        "sep": true,
++        "pclmuldq": true,
++        "virt-ssbd": false,
++        "x-hv-max-vps": -1,
++        "nodeid-msr": false,
++        "kvm": true,
++        "misalignsse": false,
++        "min-xlevel": 2147483658,
++        "kvm-pv-unhalt": false,
++        "bmi2": true,
++        "bmi1": true,
++        "realized": false,
++        "tsc_scale": false,
++        "tsc-scale": false,
++        "topoext": false,
++        "hv-vpindex": false,
++        "xlevel2": 0,
++        "clflushopt": true,
++        "kvm-no-smi-migration": false,
++        "monitor": true,
++        "avx512er": false,
++        "pmm-en": false,
++        "pcid": false,
++        "3dnow": true,
++        "erms": true,
++        "lahf-lm": true,
++        "lahf_lm": true,
++        "vpclmulqdq": false,
++        "fxsr-opt": false,
++        "hv-synic": false,
++        "xstore": false,
++        "fxsr_opt": false,
++        "kvm-hint-dedicated": false,
++        "rtm": false,
++        "lmce": false,
++        "hv-time": false,
++        "perfctr-nb": false,
++        "perfctr_nb": false,
++        "ffxsr": false,
++        "hv-tlbflush": false,
++        "rdrand": false,
++        "rdseed": false,
++        "avx512-4vnniw": false,
++        "vmx": false,
++        "vme": false,
++        "dtes64": false,
++        "mtrr": true,
++        "rdtscp": true,
++        "pse36": true,
++        "kvm-pv-tlb-flush": false,
++        "tbm": false,
++        "wdt": false,
++        "pause_filter": false,
++        "sha-ni": false,
++        "model-id": "QEMU TCG CPU version 2.5+",
++        "abm": true,
++        "avx512pf": false,
++        "xstore-en": false
++      }
++    }
++  },
++  "id": "libvirt-6"
++}
+diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+new file mode 100644
+index 0000000000..07e3de8677
+--- /dev/null
++++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+@@ -0,0 +1,1213 @@
++<qemuCaps>
++  <qemuctime>0</qemuctime>
++  <selfctime>0</selfctime>
++  <selfvers>0</selfvers>
++  <usedQMP/>
++  <flag name='kvm'/>
++  <flag name='no-hpet'/>
++  <flag name='spice'/>
++  <flag name='boot-index'/>
++  <flag name='hda-duplex'/>
++  <flag name='virtio-tx-alg'/>
++  <flag name='virtio-blk-pci.ioeventfd'/>
++  <flag name='sga'/>
++  <flag name='virtio-blk-pci.event_idx'/>
++  <flag name='virtio-net-pci.event_idx'/>
++  <flag name='piix3-usb-uhci'/>
++  <flag name='piix4-usb-uhci'/>
++  <flag name='usb-ehci'/>
++  <flag name='ich9-usb-ehci1'/>
++  <flag name='vt82c686b-usb-uhci'/>
++  <flag name='pci-ohci'/>
++  <flag name='usb-redir'/>
++  <flag name='usb-hub'/>
++  <flag name='ich9-ahci'/>
++  <flag name='no-acpi'/>
++  <flag name='virtio-blk-pci.scsi'/>
++  <flag name='scsi-disk.channel'/>
++  <flag name='scsi-block'/>
++  <flag name='transaction'/>
++  <flag name='block-job-async'/>
++  <flag name='scsi-cd'/>
++  <flag name='ide-cd'/>
++  <flag name='hda-micro'/>
++  <flag name='dump-guest-memory'/>
++  <flag name='nec-usb-xhci'/>
++  <flag name='balloon-event'/>
++  <flag name='lsi'/>
++  <flag name='virtio-scsi-pci'/>
++  <flag name='blockio'/>
++  <flag name='disable-s3'/>
++  <flag name='disable-s4'/>
++  <flag name='usb-redir.filter'/>
++  <flag name='ide-drive.wwn'/>
++  <flag name='scsi-disk.wwn'/>
++  <flag name='seccomp-sandbox'/>
++  <flag name='reboot-timeout'/>
++  <flag name='seamless-migration'/>
++  <flag name='block-commit'/>
++  <flag name='vnc'/>
++  <flag name='drive-mirror'/>
++  <flag name='usb-redir.bootindex'/>
++  <flag name='usb-host.bootindex'/>
++  <flag name='blockdev-snapshot-sync'/>
++  <flag name='qxl'/>
++  <flag name='VGA'/>
++  <flag name='cirrus-vga'/>
++  <flag name='vmware-svga'/>
++  <flag name='device-video-primary'/>
++  <flag name='usb-serial'/>
++  <flag name='usb-net'/>
++  <flag name='add-fd'/>
++  <flag name='nbd-server'/>
++  <flag name='virtio-rng'/>
++  <flag name='rng-random'/>
++  <flag name='rng-egd'/>
++  <flag name='megasas'/>
++  <flag name='tpm-passthrough'/>
++  <flag name='tpm-tis'/>
++  <flag name='pci-bridge'/>
++  <flag name='vfio-pci'/>
++  <flag name='vfio-pci.bootindex'/>
++  <flag name='scsi-generic'/>
++  <flag name='scsi-generic.bootindex'/>
++  <flag name='mem-merge'/>
++  <flag name='vnc-websocket'/>
++  <flag name='drive-discard'/>
++  <flag name='mlock'/>
++  <flag name='device-del-event'/>
++  <flag name='dmi-to-pci-bridge'/>
++  <flag name='i440fx-pci-hole64-size'/>
++  <flag name='q35-pci-hole64-size'/>
++  <flag name='usb-storage'/>
++  <flag name='usb-storage.removable'/>
++  <flag name='ich9-intel-hda'/>
++  <flag name='kvm-pit-lost-tick-policy'/>
++  <flag name='boot-strict'/>
++  <flag name='pvpanic'/>
++  <flag name='spice-file-xfer-disable'/>
++  <flag name='spiceport'/>
++  <flag name='usb-kbd'/>
++  <flag name='msg-timestamp'/>
++  <flag name='active-commit'/>
++  <flag name='change-backing-file'/>
++  <flag name='memory-backend-ram'/>
++  <flag name='numa'/>
++  <flag name='memory-backend-file'/>
++  <flag name='usb-audio'/>
++  <flag name='rtc-reset-reinjection'/>
++  <flag name='splash-timeout'/>
++  <flag name='iothread'/>
++  <flag name='migrate-rdma'/>
++  <flag name='ivshmem'/>
++  <flag name='drive-iotune-max'/>
++  <flag name='VGA.vgamem_mb'/>
++  <flag name='vmware-svga.vgamem_mb'/>
++  <flag name='qxl.vgamem_mb'/>
++  <flag name='pc-dimm'/>
++  <flag name='machine-vmport-opt'/>
++  <flag name='aes-key-wrap'/>
++  <flag name='dea-key-wrap'/>
++  <flag name='pci-serial'/>
++  <flag name='vhost-user-multiqueue'/>
++  <flag name='migration-event'/>
++  <flag name='ioh3420'/>
++  <flag name='x3130-upstream'/>
++  <flag name='xio3130-downstream'/>
++  <flag name='rtl8139'/>
++  <flag name='e1000'/>
++  <flag name='virtio-net'/>
++  <flag name='gic-version'/>
++  <flag name='incoming-defer'/>
++  <flag name='virtio-gpu'/>
++  <flag name='virtio-gpu.virgl'/>
++  <flag name='virtio-keyboard'/>
++  <flag name='virtio-mouse'/>
++  <flag name='virtio-tablet'/>
++  <flag name='virtio-input-host'/>
++  <flag name='chardev-file-append'/>
++  <flag name='ich9-disable-s3'/>
++  <flag name='ich9-disable-s4'/>
++  <flag name='vserport-change-event'/>
++  <flag name='virtio-balloon-pci.deflate-on-oom'/>
++  <flag name='mptsas1068'/>
++  <flag name='qxl.vram64_size_mb'/>
++  <flag name='chardev-logfile'/>
++  <flag name='debug-threads'/>
++  <flag name='secret'/>
++  <flag name='pxb'/>
++  <flag name='pxb-pcie'/>
++  <flag name='device-tray-moved-event'/>
++  <flag name='nec-usb-xhci-ports'/>
++  <flag name='virtio-scsi-pci.iothread'/>
++  <flag name='name-guest'/>
++  <flag name='qxl.max_outputs'/>
++  <flag name='spice-unix'/>
++  <flag name='drive-detect-zeroes'/>
++  <flag name='tls-creds-x509'/>
++  <flag name='intel-iommu'/>
++  <flag name='smm'/>
++  <flag name='virtio-pci-disable-legacy'/>
++  <flag name='query-hotpluggable-cpus'/>
++  <flag name='virtio-net.rx_queue_size'/>
++  <flag name='virtio-vga'/>
++  <flag name='drive-iotune-max-length'/>
++  <flag name='ivshmem-plain'/>
++  <flag name='ivshmem-doorbell'/>
++  <flag name='query-qmp-schema'/>
++  <flag name='gluster.debug_level'/>
++  <flag name='vhost-scsi'/>
++  <flag name='drive-iotune-group'/>
++  <flag name='query-cpu-model-expansion'/>
++  <flag name='virtio-net.host_mtu'/>
++  <flag name='nvdimm'/>
++  <flag name='pcie-root-port'/>
++  <flag name='query-cpu-definitions'/>
++  <flag name='block-write-threshold'/>
++  <flag name='query-named-block-nodes'/>
++  <flag name='cpu-cache'/>
++  <flag name='qemu-xhci'/>
++  <flag name='kernel-irqchip'/>
++  <flag name='kernel-irqchip.split'/>
++  <flag name='intel-iommu.intremap'/>
++  <flag name='intel-iommu.caching-mode'/>
++  <flag name='intel-iommu.eim'/>
++  <flag name='intel-iommu.device-iotlb'/>
++  <flag name='virtio.iommu_platform'/>
++  <flag name='virtio.ats'/>
++  <flag name='loadparm'/>
++  <flag name='vnc-multi-servers'/>
++  <flag name='virtio-net.tx_queue_size'/>
++  <flag name='chardev-reconnect'/>
++  <flag name='virtio-gpu.max_outputs'/>
++  <flag name='vxhs'/>
++  <flag name='virtio-blk.num-queues'/>
++  <flag name='vmcoreinfo'/>
++  <flag name='numa.dist'/>
++  <flag name='disk-share-rw'/>
++  <flag name='iscsi.password-secret'/>
++  <flag name='isa-serial'/>
++  <flag name='dump-completed'/>
++  <flag name='qcow2-luks'/>
++  <flag name='pcie-pci-bridge'/>
++  <flag name='seccomp-blacklist'/>
++  <flag name='query-cpus-fast'/>
++  <flag name='disk-write-cache'/>
++  <flag name='nbd-tls'/>
++  <flag name='tpm-crb'/>
++  <flag name='pr-manager-helper'/>
++  <flag name='qom-list-properties'/>
++  <flag name='memory-backend-file.discard-data'/>
++  <flag name='sdl-gl'/>
++  <flag name='screendump_device'/>
++  <flag name='hda-output'/>
++  <flag name='blockdev-del'/>
++  <flag name='vmgenid'/>
++  <flag name='vhost-vsock'/>
++  <flag name='chardev-fd-pass'/>
++  <flag name='tpm-emulator'/>
++  <flag name='mch'/>
++  <flag name='mch.extended-tseg-mbytes'/>
++  <flag name='sev-guest'/>
++  <version>2012050</version>
++  <kvmVersion>0</kvmVersion>
++  <microcodeVersion>437827</microcodeVersion>
++  <package>v2.12.0-2284-gab3257c281</package>
++  <arch>x86_64</arch>
++  <hostCPU type='kvm' model='base' migratability='yes'>
++    <property name='phys-bits' type='number' value='0'/>
++    <property name='core-id' type='number' value='-1'/>
++    <property name='xlevel' type='number' value='2147483656'/>
++    <property name='cmov' type='boolean' value='true' migratable='yes'/>
++    <property name='ia64' type='boolean' value='false'/>
++    <property name='aes' type='boolean' value='true' migratable='yes'/>
++    <property name='mmx' type='boolean' value='true' migratable='yes'/>
++    <property name='rdpid' type='boolean' value='false'/>
++    <property name='arat' type='boolean' value='true' migratable='yes'/>
++    <property name='gfni' type='boolean' value='false'/>
++    <property name='pause-filter' type='boolean' value='false'/>
++    <property name='xsavec' type='boolean' value='true' migratable='yes'/>
++    <property name='intel-pt' type='boolean' value='false'/>
++    <property name='hv-frequencies' type='boolean' value='false'/>
++    <property name='tsc-frequency' type='number' value='0'/>
++    <property name='xd' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-vendor-id' type='string' value=''/>
++    <property name='kvm-asyncpf' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm_asyncpf' type='boolean' value='true' migratable='yes'/>
++    <property name='perfctr_core' type='boolean' value='false'/>
++    <property name='perfctr-core' type='boolean' value='false'/>
++    <property name='mpx' type='boolean' value='true' migratable='yes'/>
++    <property name='pbe' type='boolean' value='false'/>
++    <property name='decodeassists' type='boolean' value='false'/>
++    <property name='avx512cd' type='boolean' value='false'/>
++    <property name='sse4_1' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4.1' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4-1' type='boolean' value='true' migratable='yes'/>
++    <property name='family' type='number' value='6'/>
++    <property name='legacy-cache' type='boolean' value='true' migratable='yes'/>
++    <property name='vmware-cpuid-freq' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512f' type='boolean' value='false'/>
++    <property name='msr' type='boolean' value='true' migratable='yes'/>
++    <property name='mce' type='boolean' value='true' migratable='yes'/>
++    <property name='mca' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-runtime' type='boolean' value='false'/>
++    <property name='xcrypt' type='boolean' value='false'/>
++    <property name='thread-id' type='number' value='-1'/>
++    <property name='min-level' type='number' value='13'/>
++    <property name='xgetbv1' type='boolean' value='true' migratable='yes'/>
++    <property name='cid' type='boolean' value='false'/>
++    <property name='hv-relaxed' type='boolean' value='false'/>
++    <property name='hv-crash' type='boolean' value='false'/>
++    <property name='ds' type='boolean' value='false'/>
++    <property name='fxsr' type='boolean' value='true' migratable='yes'/>
++    <property name='xsaveopt' type='boolean' value='true' migratable='yes'/>
++    <property name='xtpr' type='boolean' value='false'/>
++    <property name='avx512vl' type='boolean' value='false'/>
++    <property name='avx512-vpopcntdq' type='boolean' value='false'/>
++    <property name='phe' type='boolean' value='false'/>
++    <property name='extapic' type='boolean' value='false'/>
++    <property name='3dnowprefetch' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512vbmi2' type='boolean' value='false'/>
++    <property name='cr8legacy' type='boolean' value='false'/>
++    <property name='cpuid-0xb' type='boolean' value='true' migratable='yes'/>
++    <property name='xcrypt-en' type='boolean' value='false'/>
++    <property name='kvm_pv_eoi' type='boolean' value='true' migratable='yes'/>
++    <property name='apic-id' type='number' value='4294967295'/>
++    <property name='pn' type='boolean' value='false'/>
++    <property name='dca' type='boolean' value='false'/>
++    <property name='vendor' type='string' value='GenuineIntel'/>
++    <property name='pku' type='boolean' value='false'/>
++    <property name='smx' type='boolean' value='false'/>
++    <property name='cmp_legacy' type='boolean' value='false'/>
++    <property name='cmp-legacy' type='boolean' value='false'/>
++    <property name='node-id' type='number' value='-1'/>
++    <property name='avx512-4fmaps' type='boolean' value='false'/>
++    <property name='vmcb_clean' type='boolean' value='false'/>
++    <property name='vmcb-clean' type='boolean' value='false'/>
++    <property name='3dnowext' type='boolean' value='false'/>
++    <property name='amd-no-ssb' type='boolean' value='false'/>
++    <property name='hle' type='boolean' value='true' migratable='yes'/>
++    <property name='npt' type='boolean' value='false'/>
++    <property name='memory' type='string' value='/machine/unattached/system[0]'/>
++    <property name='clwb' type='boolean' value='false'/>
++    <property name='lbrv' type='boolean' value='false'/>
++    <property name='adx' type='boolean' value='true' migratable='yes'/>
++    <property name='ss' type='boolean' value='true' migratable='yes'/>
++    <property name='pni' type='boolean' value='true' migratable='yes'/>
++    <property name='svm_lock' type='boolean' value='false'/>
++    <property name='svm-lock' type='boolean' value='false'/>
++    <property name='pfthreshold' type='boolean' value='false'/>
++    <property name='smep' type='boolean' value='true' migratable='yes'/>
++    <property name='smap' type='boolean' value='true' migratable='yes'/>
++    <property name='x2apic' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512vbmi' type='boolean' value='false'/>
++    <property name='avx512vnni' type='boolean' value='false'/>
++    <property name='hv-stimer' type='boolean' value='false'/>
++    <property name='i64' type='boolean' value='true' migratable='yes'/>
++    <property name='flushbyasid' type='boolean' value='false'/>
++    <property name='f16c' type='boolean' value='true' migratable='yes'/>
++    <property name='ace2-en' type='boolean' value='false'/>
++    <property name='pat' type='boolean' value='true' migratable='yes'/>
++    <property name='pae' type='boolean' value='true' migratable='yes'/>
++    <property name='sse' type='boolean' value='true' migratable='yes'/>
++    <property name='phe-en' type='boolean' value='false'/>
++    <property name='kvm_nopiodelay' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-nopiodelay' type='boolean' value='true' migratable='yes'/>
++    <property name='tm' type='boolean' value='false'/>
++    <property name='kvmclock-stable-bit' type='boolean' value='true' migratable='yes'/>
++    <property name='hypervisor' type='boolean' value='true' migratable='yes'/>
++    <property name='socket-id' type='number' value='-1'/>
++    <property name='pcommit' type='boolean' value='false'/>
++    <property name='syscall' type='boolean' value='true' migratable='yes'/>
++    <property name='level' type='number' value='13'/>
++    <property name='avx512dq' type='boolean' value='false'/>
++    <property name='svm' type='boolean' value='false'/>
++    <property name='full-cpuid-auto-level' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-reset' type='boolean' value='false'/>
++    <property name='invtsc' type='boolean' value='true' migratable='no'/>
++    <property name='sse3' type='boolean' value='true' migratable='yes'/>
++    <property name='sse2' type='boolean' value='true' migratable='yes'/>
++    <property name='ssbd' type='boolean' value='false'/>
++    <property name='est' type='boolean' value='false'/>
++    <property name='avx512ifma' type='boolean' value='false'/>
++    <property name='tm2' type='boolean' value='false'/>
++    <property name='kvm-pv-eoi' type='boolean' value='true' migratable='yes'/>
++    <property name='cx8' type='boolean' value='true' migratable='yes'/>
++    <property name='cldemote' type='boolean' value='false'/>
++    <property name='hv-reenlightenment' type='boolean' value='false'/>
++    <property name='kvm_mmu' type='boolean' value='false'/>
++    <property name='kvm-mmu' type='boolean' value='false'/>
++    <property name='sse4_2' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4.2' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4-2' type='boolean' value='true' migratable='yes'/>
++    <property name='pge' type='boolean' value='true' migratable='yes'/>
++    <property name='fill-mtrr-mask' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512bitalg' type='boolean' value='false'/>
++    <property name='nodeid_msr' type='boolean' value='false'/>
++    <property name='pdcm' type='boolean' value='false'/>
++    <property name='movbe' type='boolean' value='true' migratable='yes'/>
++    <property name='model' type='number' value='94'/>
++    <property name='nrip_save' type='boolean' value='false'/>
++    <property name='nrip-save' type='boolean' value='false'/>
++    <property name='kvm_pv_unhalt' type='boolean' value='true' migratable='yes'/>
++    <property name='ssse3' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4a' type='boolean' value='false'/>
++    <property name='invpcid' type='boolean' value='true' migratable='yes'/>
++    <property name='pdpe1gb' type='boolean' value='true' migratable='yes'/>
++    <property name='tsc-deadline' type='boolean' value='true' migratable='yes'/>
++    <property name='fma' type='boolean' value='true' migratable='yes'/>
++    <property name='cx16' type='boolean' value='true' migratable='yes'/>
++    <property name='de' type='boolean' value='true' migratable='yes'/>
++    <property name='enforce' type='boolean' value='false'/>
++    <property name='stepping' type='number' value='3'/>
++    <property name='xsave' type='boolean' value='true' migratable='yes'/>
++    <property name='clflush' type='boolean' value='true' migratable='yes'/>
++    <property name='skinit' type='boolean' value='false'/>
++    <property name='tsc' type='boolean' value='true' migratable='yes'/>
++    <property name='tce' type='boolean' value='false'/>
++    <property name='fpu' type='boolean' value='true' migratable='yes'/>
++    <property name='ibs' type='boolean' value='false'/>
++    <property name='ds_cpl' type='boolean' value='false'/>
++    <property name='ds-cpl' type='boolean' value='false'/>
++    <property name='host-phys-bits' type='boolean' value='false'/>
++    <property name='fma4' type='boolean' value='false'/>
++    <property name='la57' type='boolean' value='false'/>
++    <property name='osvw' type='boolean' value='false'/>
++    <property name='check' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-spinlocks' type='number' value='-1'/>
++    <property name='pmu' type='boolean' value='false'/>
++    <property name='pmm' type='boolean' value='false'/>
++    <property name='apic' type='boolean' value='true' migratable='yes'/>
++    <property name='spec-ctrl' type='boolean' value='false'/>
++    <property name='min-xlevel2' type='number' value='0'/>
++    <property name='tsc-adjust' type='boolean' value='true' migratable='yes'/>
++    <property name='tsc_adjust' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-steal-time' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm_steal_time' type='boolean' value='true' migratable='yes'/>
++    <property name='kvmclock' type='boolean' value='true' migratable='yes'/>
++    <property name='l3-cache' type='boolean' value='true' migratable='yes'/>
++    <property name='lwp' type='boolean' value='false'/>
++    <property name='amd-ssbd' type='boolean' value='false'/>
++    <property name='ibpb' type='boolean' value='false'/>
++    <property name='xop' type='boolean' value='false'/>
++    <property name='avx' type='boolean' value='true' migratable='yes'/>
++    <property name='ace2' type='boolean' value='false'/>
++    <property name='avx512bw' type='boolean' value='false'/>
++    <property name='acpi' type='boolean' value='false'/>
++    <property name='hv-vapic' type='boolean' value='false'/>
++    <property name='fsgsbase' type='boolean' value='true' migratable='yes'/>
++    <property name='ht' type='boolean' value='false'/>
++    <property name='nx' type='boolean' value='true' migratable='yes'/>
++    <property name='pclmulqdq' type='boolean' value='true' migratable='yes'/>
++    <property name='mmxext' type='boolean' value='false'/>
++    <property name='vaes' type='boolean' value='false'/>
++    <property name='popcnt' type='boolean' value='true' migratable='yes'/>
++    <property name='xsaves' type='boolean' value='true' migratable='yes'/>
++    <property name='tcg-cpuid' type='boolean' value='true' migratable='yes'/>
++    <property name='lm' type='boolean' value='true' migratable='yes'/>
++    <property name='umip' type='boolean' value='false'/>
++    <property name='pse' type='boolean' value='true' migratable='yes'/>
++    <property name='avx2' type='boolean' value='true' migratable='yes'/>
++    <property name='sep' type='boolean' value='true' migratable='yes'/>
++    <property name='pclmuldq' type='boolean' value='true' migratable='yes'/>
++    <property name='virt-ssbd' type='boolean' value='false'/>
++    <property name='x-hv-max-vps' type='number' value='-1'/>
++    <property name='nodeid-msr' type='boolean' value='false'/>
++    <property name='kvm' type='boolean' value='true' migratable='yes'/>
++    <property name='misalignsse' type='boolean' value='false'/>
++    <property name='min-xlevel' type='number' value='2147483656'/>
++    <property name='kvm-pv-unhalt' type='boolean' value='true' migratable='yes'/>
++    <property name='bmi2' type='boolean' value='true' migratable='yes'/>
++    <property name='bmi1' type='boolean' value='true' migratable='yes'/>
++    <property name='realized' type='boolean' value='false'/>
++    <property name='tsc_scale' type='boolean' value='false'/>
++    <property name='tsc-scale' type='boolean' value='false'/>
++    <property name='topoext' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-vpindex' type='boolean' value='false'/>
++    <property name='xlevel2' type='number' value='0'/>
++    <property name='clflushopt' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-no-smi-migration' type='boolean' value='false'/>
++    <property name='monitor' type='boolean' value='false'/>
++    <property name='avx512er' type='boolean' value='false'/>
++    <property name='pmm-en' type='boolean' value='false'/>
++    <property name='pcid' type='boolean' value='true' migratable='yes'/>
++    <property name='3dnow' type='boolean' value='false'/>
++    <property name='erms' type='boolean' value='true' migratable='yes'/>
++    <property name='lahf-lm' type='boolean' value='true' migratable='yes'/>
++    <property name='lahf_lm' type='boolean' value='true' migratable='yes'/>
++    <property name='vpclmulqdq' type='boolean' value='false'/>
++    <property name='fxsr-opt' type='boolean' value='false'/>
++    <property name='hv-synic' type='boolean' value='false'/>
++    <property name='xstore' type='boolean' value='false'/>
++    <property name='fxsr_opt' type='boolean' value='false'/>
++    <property name='kvm-hint-dedicated' type='boolean' value='false'/>
++    <property name='rtm' type='boolean' value='true' migratable='yes'/>
++    <property name='lmce' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-time' type='boolean' value='false'/>
++    <property name='perfctr-nb' type='boolean' value='false'/>
++    <property name='perfctr_nb' type='boolean' value='false'/>
++    <property name='ffxsr' type='boolean' value='false'/>
++    <property name='hv-tlbflush' type='boolean' value='false'/>
++    <property name='rdrand' type='boolean' value='true' migratable='yes'/>
++    <property name='rdseed' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512-4vnniw' type='boolean' value='false'/>
++    <property name='vmx' type='boolean' value='false'/>
++    <property name='vme' type='boolean' value='true' migratable='yes'/>
++    <property name='dtes64' type='boolean' value='false'/>
++    <property name='mtrr' type='boolean' value='true' migratable='yes'/>
++    <property name='rdtscp' type='boolean' value='true' migratable='yes'/>
++    <property name='pse36' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-pv-tlb-flush' type='boolean' value='false'/>
++    <property name='tbm' type='boolean' value='false'/>
++    <property name='wdt' type='boolean' value='false'/>
++    <property name='pause_filter' type='boolean' value='false'/>
++    <property name='sha-ni' type='boolean' value='false'/>
++    <property name='model-id' type='string' value='Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz'/>
++    <property name='abm' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512pf' type='boolean' value='false'/>
++    <property name='xstore-en' type='boolean' value='false'/>
++  </hostCPU>
++  <hostCPU type='tcg' model='base' migratability='yes'>
++    <property name='phys-bits' type='number' value='0'/>
++    <property name='core-id' type='number' value='-1'/>
++    <property name='xlevel' type='number' value='2147483658'/>
++    <property name='cmov' type='boolean' value='true' migratable='yes'/>
++    <property name='ia64' type='boolean' value='false'/>
++    <property name='aes' type='boolean' value='true' migratable='yes'/>
++    <property name='mmx' type='boolean' value='true' migratable='yes'/>
++    <property name='rdpid' type='boolean' value='false'/>
++    <property name='arat' type='boolean' value='true' migratable='yes'/>
++    <property name='gfni' type='boolean' value='false'/>
++    <property name='pause-filter' type='boolean' value='false'/>
++    <property name='xsavec' type='boolean' value='false'/>
++    <property name='intel-pt' type='boolean' value='false'/>
++    <property name='hv-frequencies' type='boolean' value='false'/>
++    <property name='tsc-frequency' type='number' value='0'/>
++    <property name='xd' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-vendor-id' type='string' value=''/>
++    <property name='kvm-asyncpf' type='boolean' value='false'/>
++    <property name='kvm_asyncpf' type='boolean' value='false'/>
++    <property name='perfctr_core' type='boolean' value='false'/>
++    <property name='perfctr-core' type='boolean' value='false'/>
++    <property name='mpx' type='boolean' value='true' migratable='yes'/>
++    <property name='pbe' type='boolean' value='false'/>
++    <property name='decodeassists' type='boolean' value='false'/>
++    <property name='avx512cd' type='boolean' value='false'/>
++    <property name='sse4_1' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4.1' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4-1' type='boolean' value='true' migratable='yes'/>
++    <property name='family' type='number' value='6'/>
++    <property name='legacy-cache' type='boolean' value='true' migratable='yes'/>
++    <property name='vmware-cpuid-freq' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512f' type='boolean' value='false'/>
++    <property name='msr' type='boolean' value='true' migratable='yes'/>
++    <property name='mce' type='boolean' value='true' migratable='yes'/>
++    <property name='mca' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-runtime' type='boolean' value='false'/>
++    <property name='xcrypt' type='boolean' value='false'/>
++    <property name='thread-id' type='number' value='-1'/>
++    <property name='min-level' type='number' value='13'/>
++    <property name='xgetbv1' type='boolean' value='true' migratable='yes'/>
++    <property name='cid' type='boolean' value='false'/>
++    <property name='hv-relaxed' type='boolean' value='false'/>
++    <property name='hv-crash' type='boolean' value='false'/>
++    <property name='ds' type='boolean' value='false'/>
++    <property name='fxsr' type='boolean' value='true' migratable='yes'/>
++    <property name='xsaveopt' type='boolean' value='true' migratable='yes'/>
++    <property name='xtpr' type='boolean' value='false'/>
++    <property name='avx512vl' type='boolean' value='false'/>
++    <property name='avx512-vpopcntdq' type='boolean' value='false'/>
++    <property name='phe' type='boolean' value='false'/>
++    <property name='extapic' type='boolean' value='false'/>
++    <property name='3dnowprefetch' type='boolean' value='false'/>
++    <property name='avx512vbmi2' type='boolean' value='false'/>
++    <property name='cr8legacy' type='boolean' value='true' migratable='yes'/>
++    <property name='cpuid-0xb' type='boolean' value='true' migratable='yes'/>
++    <property name='xcrypt-en' type='boolean' value='false'/>
++    <property name='kvm_pv_eoi' type='boolean' value='false'/>
++    <property name='apic-id' type='number' value='4294967295'/>
++    <property name='pn' type='boolean' value='false'/>
++    <property name='dca' type='boolean' value='false'/>
++    <property name='vendor' type='string' value='AuthenticAMD'/>
++    <property name='pku' type='boolean' value='true' migratable='yes'/>
++    <property name='smx' type='boolean' value='false'/>
++    <property name='cmp_legacy' type='boolean' value='false'/>
++    <property name='cmp-legacy' type='boolean' value='false'/>
++    <property name='node-id' type='number' value='-1'/>
++    <property name='avx512-4fmaps' type='boolean' value='false'/>
++    <property name='vmcb_clean' type='boolean' value='false'/>
++    <property name='vmcb-clean' type='boolean' value='false'/>
++    <property name='3dnowext' type='boolean' value='true' migratable='yes'/>
++    <property name='amd-no-ssb' type='boolean' value='false'/>
++    <property name='hle' type='boolean' value='false'/>
++    <property name='npt' type='boolean' value='true' migratable='yes'/>
++    <property name='memory' type='string' value='/machine/unattached/system[0]'/>
++    <property name='clwb' type='boolean' value='true' migratable='yes'/>
++    <property name='lbrv' type='boolean' value='false'/>
++    <property name='adx' type='boolean' value='true' migratable='yes'/>
++    <property name='ss' type='boolean' value='true' migratable='yes'/>
++    <property name='pni' type='boolean' value='true' migratable='yes'/>
++    <property name='svm_lock' type='boolean' value='false'/>
++    <property name='svm-lock' type='boolean' value='false'/>
++    <property name='pfthreshold' type='boolean' value='false'/>
++    <property name='smep' type='boolean' value='true' migratable='yes'/>
++    <property name='smap' type='boolean' value='true' migratable='yes'/>
++    <property name='x2apic' type='boolean' value='false'/>
++    <property name='avx512vbmi' type='boolean' value='false'/>
++    <property name='avx512vnni' type='boolean' value='false'/>
++    <property name='hv-stimer' type='boolean' value='false'/>
++    <property name='i64' type='boolean' value='true' migratable='yes'/>
++    <property name='flushbyasid' type='boolean' value='false'/>
++    <property name='f16c' type='boolean' value='false'/>
++    <property name='ace2-en' type='boolean' value='false'/>
++    <property name='pat' type='boolean' value='true' migratable='yes'/>
++    <property name='pae' type='boolean' value='true' migratable='yes'/>
++    <property name='sse' type='boolean' value='true' migratable='yes'/>
++    <property name='phe-en' type='boolean' value='false'/>
++    <property name='kvm_nopiodelay' type='boolean' value='false'/>
++    <property name='kvm-nopiodelay' type='boolean' value='false'/>
++    <property name='tm' type='boolean' value='false'/>
++    <property name='kvmclock-stable-bit' type='boolean' value='false'/>
++    <property name='hypervisor' type='boolean' value='true' migratable='yes'/>
++    <property name='socket-id' type='number' value='-1'/>
++    <property name='pcommit' type='boolean' value='true' migratable='yes'/>
++    <property name='syscall' type='boolean' value='true' migratable='yes'/>
++    <property name='level' type='number' value='13'/>
++    <property name='avx512dq' type='boolean' value='false'/>
++    <property name='svm' type='boolean' value='true' migratable='yes'/>
++    <property name='full-cpuid-auto-level' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-reset' type='boolean' value='false'/>
++    <property name='invtsc' type='boolean' value='false'/>
++    <property name='sse3' type='boolean' value='true' migratable='yes'/>
++    <property name='sse2' type='boolean' value='true' migratable='yes'/>
++    <property name='ssbd' type='boolean' value='false'/>
++    <property name='est' type='boolean' value='false'/>
++    <property name='avx512ifma' type='boolean' value='false'/>
++    <property name='tm2' type='boolean' value='false'/>
++    <property name='kvm-pv-eoi' type='boolean' value='false'/>
++    <property name='cx8' type='boolean' value='true' migratable='yes'/>
++    <property name='cldemote' type='boolean' value='false'/>
++    <property name='hv-reenlightenment' type='boolean' value='false'/>
++    <property name='kvm_mmu' type='boolean' value='false'/>
++    <property name='kvm-mmu' type='boolean' value='false'/>
++    <property name='sse4_2' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4.2' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4-2' type='boolean' value='true' migratable='yes'/>
++    <property name='pge' type='boolean' value='true' migratable='yes'/>
++    <property name='fill-mtrr-mask' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512bitalg' type='boolean' value='false'/>
++    <property name='nodeid_msr' type='boolean' value='false'/>
++    <property name='pdcm' type='boolean' value='false'/>
++    <property name='movbe' type='boolean' value='true' migratable='yes'/>
++    <property name='model' type='number' value='6'/>
++    <property name='nrip_save' type='boolean' value='false'/>
++    <property name='nrip-save' type='boolean' value='false'/>
++    <property name='kvm_pv_unhalt' type='boolean' value='false'/>
++    <property name='ssse3' type='boolean' value='true' migratable='yes'/>
++    <property name='sse4a' type='boolean' value='true' migratable='yes'/>
++    <property name='invpcid' type='boolean' value='false'/>
++    <property name='pdpe1gb' type='boolean' value='true' migratable='yes'/>
++    <property name='tsc-deadline' type='boolean' value='false'/>
++    <property name='fma' type='boolean' value='false'/>
++    <property name='cx16' type='boolean' value='true' migratable='yes'/>
++    <property name='de' type='boolean' value='true' migratable='yes'/>
++    <property name='enforce' type='boolean' value='false'/>
++    <property name='stepping' type='number' value='3'/>
++    <property name='xsave' type='boolean' value='true' migratable='yes'/>
++    <property name='clflush' type='boolean' value='true' migratable='yes'/>
++    <property name='skinit' type='boolean' value='false'/>
++    <property name='tsc' type='boolean' value='true' migratable='yes'/>
++    <property name='tce' type='boolean' value='false'/>
++    <property name='fpu' type='boolean' value='true' migratable='yes'/>
++    <property name='ibs' type='boolean' value='false'/>
++    <property name='ds_cpl' type='boolean' value='false'/>
++    <property name='ds-cpl' type='boolean' value='false'/>
++    <property name='host-phys-bits' type='boolean' value='false'/>
++    <property name='fma4' type='boolean' value='false'/>
++    <property name='la57' type='boolean' value='true' migratable='yes'/>
++    <property name='osvw' type='boolean' value='false'/>
++    <property name='check' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-spinlocks' type='number' value='-1'/>
++    <property name='pmu' type='boolean' value='false'/>
++    <property name='pmm' type='boolean' value='false'/>
++    <property name='apic' type='boolean' value='true' migratable='yes'/>
++    <property name='spec-ctrl' type='boolean' value='false'/>
++    <property name='min-xlevel2' type='number' value='0'/>
++    <property name='tsc-adjust' type='boolean' value='false'/>
++    <property name='tsc_adjust' type='boolean' value='false'/>
++    <property name='kvm-steal-time' type='boolean' value='false'/>
++    <property name='kvm_steal_time' type='boolean' value='false'/>
++    <property name='kvmclock' type='boolean' value='false'/>
++    <property name='l3-cache' type='boolean' value='true' migratable='yes'/>
++    <property name='lwp' type='boolean' value='false'/>
++    <property name='amd-ssbd' type='boolean' value='false'/>
++    <property name='ibpb' type='boolean' value='false'/>
++    <property name='xop' type='boolean' value='false'/>
++    <property name='avx' type='boolean' value='false'/>
++    <property name='ace2' type='boolean' value='false'/>
++    <property name='avx512bw' type='boolean' value='false'/>
++    <property name='acpi' type='boolean' value='true' migratable='yes'/>
++    <property name='hv-vapic' type='boolean' value='false'/>
++    <property name='fsgsbase' type='boolean' value='true' migratable='yes'/>
++    <property name='ht' type='boolean' value='false'/>
++    <property name='nx' type='boolean' value='true' migratable='yes'/>
++    <property name='pclmulqdq' type='boolean' value='true' migratable='yes'/>
++    <property name='mmxext' type='boolean' value='true' migratable='yes'/>
++    <property name='vaes' type='boolean' value='false'/>
++    <property name='popcnt' type='boolean' value='true' migratable='yes'/>
++    <property name='xsaves' type='boolean' value='false'/>
++    <property name='tcg-cpuid' type='boolean' value='true' migratable='yes'/>
++    <property name='lm' type='boolean' value='true' migratable='yes'/>
++    <property name='umip' type='boolean' value='false'/>
++    <property name='pse' type='boolean' value='true' migratable='yes'/>
++    <property name='avx2' type='boolean' value='false'/>
++    <property name='sep' type='boolean' value='true' migratable='yes'/>
++    <property name='pclmuldq' type='boolean' value='true' migratable='yes'/>
++    <property name='virt-ssbd' type='boolean' value='false'/>
++    <property name='x-hv-max-vps' type='number' value='-1'/>
++    <property name='nodeid-msr' type='boolean' value='false'/>
++    <property name='kvm' type='boolean' value='true' migratable='yes'/>
++    <property name='misalignsse' type='boolean' value='false'/>
++    <property name='min-xlevel' type='number' value='2147483658'/>
++    <property name='kvm-pv-unhalt' type='boolean' value='false'/>
++    <property name='bmi2' type='boolean' value='true' migratable='yes'/>
++    <property name='bmi1' type='boolean' value='true' migratable='yes'/>
++    <property name='realized' type='boolean' value='false'/>
++    <property name='tsc_scale' type='boolean' value='false'/>
++    <property name='tsc-scale' type='boolean' value='false'/>
++    <property name='topoext' type='boolean' value='false'/>
++    <property name='hv-vpindex' type='boolean' value='false'/>
++    <property name='xlevel2' type='number' value='0'/>
++    <property name='clflushopt' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-no-smi-migration' type='boolean' value='false'/>
++    <property name='monitor' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512er' type='boolean' value='false'/>
++    <property name='pmm-en' type='boolean' value='false'/>
++    <property name='pcid' type='boolean' value='false'/>
++    <property name='3dnow' type='boolean' value='true' migratable='yes'/>
++    <property name='erms' type='boolean' value='true' migratable='yes'/>
++    <property name='lahf-lm' type='boolean' value='true' migratable='yes'/>
++    <property name='lahf_lm' type='boolean' value='true' migratable='yes'/>
++    <property name='vpclmulqdq' type='boolean' value='false'/>
++    <property name='fxsr-opt' type='boolean' value='false'/>
++    <property name='hv-synic' type='boolean' value='false'/>
++    <property name='xstore' type='boolean' value='false'/>
++    <property name='fxsr_opt' type='boolean' value='false'/>
++    <property name='kvm-hint-dedicated' type='boolean' value='false'/>
++    <property name='rtm' type='boolean' value='false'/>
++    <property name='lmce' type='boolean' value='false'/>
++    <property name='hv-time' type='boolean' value='false'/>
++    <property name='perfctr-nb' type='boolean' value='false'/>
++    <property name='perfctr_nb' type='boolean' value='false'/>
++    <property name='ffxsr' type='boolean' value='false'/>
++    <property name='hv-tlbflush' type='boolean' value='false'/>
++    <property name='rdrand' type='boolean' value='false'/>
++    <property name='rdseed' type='boolean' value='false'/>
++    <property name='avx512-4vnniw' type='boolean' value='false'/>
++    <property name='vmx' type='boolean' value='false'/>
++    <property name='vme' type='boolean' value='false'/>
++    <property name='dtes64' type='boolean' value='false'/>
++    <property name='mtrr' type='boolean' value='true' migratable='yes'/>
++    <property name='rdtscp' type='boolean' value='true' migratable='yes'/>
++    <property name='pse36' type='boolean' value='true' migratable='yes'/>
++    <property name='kvm-pv-tlb-flush' type='boolean' value='false'/>
++    <property name='tbm' type='boolean' value='false'/>
++    <property name='wdt' type='boolean' value='false'/>
++    <property name='pause_filter' type='boolean' value='false'/>
++    <property name='sha-ni' type='boolean' value='false'/>
++    <property name='model-id' type='string' value='QEMU TCG CPU version 2.5+'/>
++    <property name='abm' type='boolean' value='true' migratable='yes'/>
++    <property name='avx512pf' type='boolean' value='false'/>
++    <property name='xstore-en' type='boolean' value='false'/>
++  </hostCPU>
++  <cpu type='kvm' name='max' usable='yes'/>
++  <cpu type='kvm' name='host' usable='yes'/>
++  <cpu type='kvm' name='base' usable='yes'/>
++  <cpu type='kvm' name='qemu64' usable='yes'/>
++  <cpu type='kvm' name='qemu32' usable='yes'/>
++  <cpu type='kvm' name='phenom' usable='no'>
++    <blocker name='mmxext'/>
++    <blocker name='fxsr-opt'/>
++    <blocker name='3dnowext'/>
++    <blocker name='3dnow'/>
++    <blocker name='sse4a'/>
++    <blocker name='npt'/>
++  </cpu>
++  <cpu type='kvm' name='pentium3' usable='yes'/>
++  <cpu type='kvm' name='pentium2' usable='yes'/>
++  <cpu type='kvm' name='pentium' usable='yes'/>
++  <cpu type='kvm' name='n270' usable='yes'/>
++  <cpu type='kvm' name='kvm64' usable='yes'/>
++  <cpu type='kvm' name='kvm32' usable='yes'/>
++  <cpu type='kvm' name='coreduo' usable='yes'/>
++  <cpu type='kvm' name='core2duo' usable='yes'/>
++  <cpu type='kvm' name='athlon' usable='no'>
++    <blocker name='mmxext'/>
++    <blocker name='3dnowext'/>
++    <blocker name='3dnow'/>
++  </cpu>
++  <cpu type='kvm' name='Westmere-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='kvm' name='Westmere' usable='yes'/>
++  <cpu type='kvm' name='Skylake-Server-IBRS' usable='no'>
++    <blocker name='avx512f'/>
++    <blocker name='avx512dq'/>
++    <blocker name='clwb'/>
++    <blocker name='avx512cd'/>
++    <blocker name='avx512bw'/>
++    <blocker name='avx512vl'/>
++    <blocker name='spec-ctrl'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512f'/>
++  </cpu>
++  <cpu type='kvm' name='Skylake-Server' usable='no'>
++    <blocker name='avx512f'/>
++    <blocker name='avx512dq'/>
++    <blocker name='clwb'/>
++    <blocker name='avx512cd'/>
++    <blocker name='avx512bw'/>
++    <blocker name='avx512vl'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512f'/>
++  </cpu>
++  <cpu type='kvm' name='Skylake-Client-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='kvm' name='Skylake-Client' usable='yes'/>
++  <cpu type='kvm' name='SandyBridge-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='kvm' name='SandyBridge' usable='yes'/>
++  <cpu type='kvm' name='Penryn' usable='yes'/>
++  <cpu type='kvm' name='Opteron_G5' usable='no'>
++    <blocker name='sse4a'/>
++    <blocker name='misalignsse'/>
++    <blocker name='xop'/>
++    <blocker name='fma4'/>
++    <blocker name='tbm'/>
++  </cpu>
++  <cpu type='kvm' name='Opteron_G4' usable='no'>
++    <blocker name='sse4a'/>
++    <blocker name='misalignsse'/>
++    <blocker name='xop'/>
++    <blocker name='fma4'/>
++  </cpu>
++  <cpu type='kvm' name='Opteron_G3' usable='no'>
++    <blocker name='sse4a'/>
++    <blocker name='misalignsse'/>
++  </cpu>
++  <cpu type='kvm' name='Opteron_G2' usable='yes'/>
++  <cpu type='kvm' name='Opteron_G1' usable='yes'/>
++  <cpu type='kvm' name='Nehalem-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='kvm' name='Nehalem' usable='yes'/>
++  <cpu type='kvm' name='KnightsMill' usable='no'>
++    <blocker name='avx512f'/>
++    <blocker name='avx512pf'/>
++    <blocker name='avx512er'/>
++    <blocker name='avx512cd'/>
++    <blocker name='avx512-vpopcntdq'/>
++    <blocker name='avx512-4vnniw'/>
++    <blocker name='avx512-4fmaps'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512f'/>
++  </cpu>
++  <cpu type='kvm' name='IvyBridge-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='kvm' name='IvyBridge' usable='yes'/>
++  <cpu type='kvm' name='Haswell-noTSX-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='kvm' name='Haswell-noTSX' usable='yes'/>
++  <cpu type='kvm' name='Haswell-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='kvm' name='Haswell' usable='yes'/>
++  <cpu type='kvm' name='EPYC-IBPB' usable='no'>
++    <blocker name='sha-ni'/>
++    <blocker name='mmxext'/>
++    <blocker name='fxsr-opt'/>
++    <blocker name='cr8legacy'/>
++    <blocker name='sse4a'/>
++    <blocker name='misalignsse'/>
++    <blocker name='osvw'/>
++    <blocker name='ibpb'/>
++  </cpu>
++  <cpu type='kvm' name='EPYC' usable='no'>
++    <blocker name='sha-ni'/>
++    <blocker name='mmxext'/>
++    <blocker name='fxsr-opt'/>
++    <blocker name='cr8legacy'/>
++    <blocker name='sse4a'/>
++    <blocker name='misalignsse'/>
++    <blocker name='osvw'/>
++  </cpu>
++  <cpu type='kvm' name='Conroe' usable='yes'/>
++  <cpu type='kvm' name='Broadwell-noTSX-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='kvm' name='Broadwell-noTSX' usable='yes'/>
++  <cpu type='kvm' name='Broadwell-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='kvm' name='Broadwell' usable='yes'/>
++  <cpu type='kvm' name='486' usable='yes'/>
++  <cpu type='tcg' name='max' usable='yes'/>
++  <cpu type='tcg' name='host' usable='no'>
++    <blocker name='kvm'/>
++  </cpu>
++  <cpu type='tcg' name='base' usable='yes'/>
++  <cpu type='tcg' name='qemu64' usable='yes'/>
++  <cpu type='tcg' name='qemu32' usable='yes'/>
++  <cpu type='tcg' name='phenom' usable='no'>
++    <blocker name='fxsr-opt'/>
++  </cpu>
++  <cpu type='tcg' name='pentium3' usable='yes'/>
++  <cpu type='tcg' name='pentium2' usable='yes'/>
++  <cpu type='tcg' name='pentium' usable='yes'/>
++  <cpu type='tcg' name='n270' usable='yes'/>
++  <cpu type='tcg' name='kvm64' usable='yes'/>
++  <cpu type='tcg' name='kvm32' usable='yes'/>
++  <cpu type='tcg' name='coreduo' usable='yes'/>
++  <cpu type='tcg' name='core2duo' usable='yes'/>
++  <cpu type='tcg' name='athlon' usable='yes'/>
++  <cpu type='tcg' name='Westmere-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='tcg' name='Westmere' usable='yes'/>
++  <cpu type='tcg' name='Skylake-Server-IBRS' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512dq'/>
++    <blocker name='rdseed'/>
++    <blocker name='avx512cd'/>
++    <blocker name='avx512bw'/>
++    <blocker name='avx512vl'/>
++    <blocker name='spec-ctrl'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='xsavec'/>
++  </cpu>
++  <cpu type='tcg' name='Skylake-Server' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++    <blocker name='avx512f'/>
++    <blocker name='avx512dq'/>
++    <blocker name='rdseed'/>
++    <blocker name='avx512cd'/>
++    <blocker name='avx512bw'/>
++    <blocker name='avx512vl'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='xsavec'/>
++  </cpu>
++  <cpu type='tcg' name='Skylake-Client-IBRS' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++    <blocker name='rdseed'/>
++    <blocker name='spec-ctrl'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='xsavec'/>
++  </cpu>
++  <cpu type='tcg' name='Skylake-Client' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++    <blocker name='rdseed'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='xsavec'/>
++  </cpu>
++  <cpu type='tcg' name='SandyBridge-IBRS' usable='no'>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='tcg' name='SandyBridge' usable='no'>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++  </cpu>
++  <cpu type='tcg' name='Penryn' usable='yes'/>
++  <cpu type='tcg' name='Opteron_G5' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='misalignsse'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='xop'/>
++    <blocker name='fma4'/>
++    <blocker name='tbm'/>
++  </cpu>
++  <cpu type='tcg' name='Opteron_G4' usable='no'>
++    <blocker name='avx'/>
++    <blocker name='misalignsse'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='xop'/>
++    <blocker name='fma4'/>
++  </cpu>
++  <cpu type='tcg' name='Opteron_G3' usable='no'>
++    <blocker name='misalignsse'/>
++  </cpu>
++  <cpu type='tcg' name='Opteron_G2' usable='yes'/>
++  <cpu type='tcg' name='Opteron_G1' usable='yes'/>
++  <cpu type='tcg' name='Nehalem-IBRS' usable='no'>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='tcg' name='Nehalem' usable='yes'/>
++  <cpu type='tcg' name='KnightsMill' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='avx2'/>
++    <blocker name='avx512f'/>
++    <blocker name='rdseed'/>
++    <blocker name='avx512pf'/>
++    <blocker name='avx512er'/>
++    <blocker name='avx512cd'/>
++    <blocker name='avx512-vpopcntdq'/>
++    <blocker name='avx512-4vnniw'/>
++    <blocker name='avx512-4fmaps'/>
++    <blocker name='3dnowprefetch'/>
++  </cpu>
++  <cpu type='tcg' name='IvyBridge-IBRS' usable='no'>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='tcg' name='IvyBridge' usable='no'>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++  </cpu>
++  <cpu type='tcg' name='Haswell-noTSX-IBRS' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='tcg' name='Haswell-noTSX' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++  </cpu>
++  <cpu type='tcg' name='Haswell-IBRS' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++    <blocker name='spec-ctrl'/>
++  </cpu>
++  <cpu type='tcg' name='Haswell' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++  </cpu>
++  <cpu type='tcg' name='EPYC-IBPB' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='avx2'/>
++    <blocker name='rdseed'/>
++    <blocker name='sha-ni'/>
++    <blocker name='fxsr-opt'/>
++    <blocker name='misalignsse'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='osvw'/>
++    <blocker name='topoext'/>
++    <blocker name='ibpb'/>
++    <blocker name='xsavec'/>
++  </cpu>
++  <cpu type='tcg' name='EPYC' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='avx2'/>
++    <blocker name='rdseed'/>
++    <blocker name='sha-ni'/>
++    <blocker name='fxsr-opt'/>
++    <blocker name='misalignsse'/>
++    <blocker name='3dnowprefetch'/>
++    <blocker name='osvw'/>
++    <blocker name='topoext'/>
++    <blocker name='xsavec'/>
++  </cpu>
++  <cpu type='tcg' name='Conroe' usable='yes'/>
++  <cpu type='tcg' name='Broadwell-noTSX-IBRS' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rdseed'/>
++    <blocker name='spec-ctrl'/>
++    <blocker name='3dnowprefetch'/>
++  </cpu>
++  <cpu type='tcg' name='Broadwell-noTSX' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rdseed'/>
++    <blocker name='3dnowprefetch'/>
++  </cpu>
++  <cpu type='tcg' name='Broadwell-IBRS' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++    <blocker name='rdseed'/>
++    <blocker name='spec-ctrl'/>
++    <blocker name='3dnowprefetch'/>
++  </cpu>
++  <cpu type='tcg' name='Broadwell' usable='no'>
++    <blocker name='fma'/>
++    <blocker name='pcid'/>
++    <blocker name='x2apic'/>
++    <blocker name='tsc-deadline'/>
++    <blocker name='avx'/>
++    <blocker name='f16c'/>
++    <blocker name='rdrand'/>
++    <blocker name='hle'/>
++    <blocker name='avx2'/>
++    <blocker name='invpcid'/>
++    <blocker name='rtm'/>
++    <blocker name='rdseed'/>
++    <blocker name='3dnowprefetch'/>
++  </cpu>
++  <cpu type='tcg' name='486' usable='yes'/>
++  <machine name='pc-i440fx-3.0' alias='pc' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='isapc' hotplugCpus='yes' maxCpus='1'/>
++  <machine name='pc-1.1' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-1.2' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-1.3' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.8' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-1.0' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.9' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.6' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.7' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='xenfv' hotplugCpus='yes' maxCpus='128'/>
++  <machine name='pc-i440fx-2.3' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.4' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.5' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.1' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.2' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.0' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.11' hotplugCpus='yes' maxCpus='288'/>
++  <machine name='pc-q35-2.12' hotplugCpus='yes' maxCpus='288'/>
++  <machine name='pc-q35-3.0' alias='q35' hotplugCpus='yes' maxCpus='288'/>
++  <machine name='xenpv' maxCpus='1'/>
++  <machine name='pc-q35-2.10' hotplugCpus='yes' maxCpus='288'/>
++  <machine name='pc-i440fx-1.7' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.9' hotplugCpus='yes' maxCpus='288'/>
++  <machine name='pc-0.15' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-1.5' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.7' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-1.6' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.11' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.8' hotplugCpus='yes' maxCpus='288'/>
++  <machine name='pc-0.13' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.12' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-0.14' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.4' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.5' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-q35-2.6' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-1.4' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-i440fx-2.10' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-0.11' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-0.12' hotplugCpus='yes' maxCpus='255'/>
++  <machine name='pc-0.10' hotplugCpus='yes' maxCpus='255'/>
++</qemuCaps>
+diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c
+index 43f2bcfbc8..0813672537 100644
+--- a/tests/qemucapabilitiestest.c
++++ b/tests/qemucapabilitiestest.c
+@@ -175,6 +175,7 @@ mymain(void)
+     DO_TEST("x86_64", "caps_2.9.0");
+     DO_TEST("x86_64", "caps_2.10.0");
+     DO_TEST("x86_64", "caps_2.12.0");
++    DO_TEST("x86_64", "caps_3.0.0");
+     DO_TEST("aarch64", "caps_2.6.0");
+     DO_TEST("aarch64", "caps_2.10.0");
+     DO_TEST("aarch64", "caps_2.12.0");
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-qemuxml2argv-Add-test-case-for-empty-CDROM-with-cache-mode.patch b/SOURCES/libvirt-tests-qemuxml2argv-Add-test-case-for-empty-CDROM-with-cache-mode.patch
new file mode 100644
index 0000000..e55d7eb
--- /dev/null
+++ b/SOURCES/libvirt-tests-qemuxml2argv-Add-test-case-for-empty-CDROM-with-cache-mode.patch
@@ -0,0 +1,85 @@
+From 743fd6401299ceee855b50ee844b8f2fb39551d2 Mon Sep 17 00:00:00 2001
+Message-Id: <743fd6401299ceee855b50ee844b8f2fb39551d2@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Mon, 21 Jan 2019 18:43:12 +0100
+Subject: [PATCH] tests: qemuxml2argv: Add test case for empty CDROM with cache
+ mode
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upcomming change will influence CDROM with cache mode so add a test
+case.
+
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit a641e044c1294984979199fefbb9a9c928f7708a)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1553255
+
+ Conflicts:
+	tests/qemuxml2argvdata/disk-cdrom.args
+            - context: bootindex not yet assumed
+	tests/qemuxml2argvdata/disk-cdrom.x86_64-2.12.0.args
+	tests/qemuxml2argvdata/disk-cdrom.x86_64-latest.args
+            - missing refactor to capability file based tests
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ tests/qemuxml2argvdata/disk-cdrom.args  | 4 +++-
+ tests/qemuxml2argvdata/disk-cdrom.xml   | 6 ++++++
+ tests/qemuxml2xmloutdata/disk-cdrom.xml | 6 ++++++
+ 3 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/tests/qemuxml2argvdata/disk-cdrom.args b/tests/qemuxml2argvdata/disk-cdrom.args
+index 55a76f6dac..547263cbd8 100644
+--- a/tests/qemuxml2argvdata/disk-cdrom.args
++++ b/tests/qemuxml2argvdata/disk-cdrom.args
+@@ -24,6 +24,8 @@ server,nowait \
+ -usb \
+ -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+ -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+--drive file=/root/boot.iso,format=raw,if=none,id=drive-ide0-1-0,media=cdrom,\
++-drive file=/root/boot.iso,format=raw,if=none,id=drive-ide0-0-1,media=cdrom,\
+ readonly=on \
++-device ide-drive,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 \
++-drive if=none,id=drive-ide0-1-0,media=cdrom,readonly=on,cache=none \
+ -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0
+diff --git a/tests/qemuxml2argvdata/disk-cdrom.xml b/tests/qemuxml2argvdata/disk-cdrom.xml
+index 341025c477..fa78f652bf 100644
+--- a/tests/qemuxml2argvdata/disk-cdrom.xml
++++ b/tests/qemuxml2argvdata/disk-cdrom.xml
+@@ -23,6 +23,12 @@
+     <disk type='file' device='cdrom'>
+       <driver name='qemu' type='raw'/>
+       <source file='/root/boot.iso'/>
++      <target dev='hdb' bus='ide'/>
++      <readonly/>
++      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
++    </disk>
++    <disk type='file' device='cdrom'>
++      <driver name='qemu' type='raw' cache='none'/>
+       <target dev='hdc' bus='ide'/>
+       <readonly/>
+       <address type='drive' controller='0' bus='1' target='0' unit='0'/>
+diff --git a/tests/qemuxml2xmloutdata/disk-cdrom.xml b/tests/qemuxml2xmloutdata/disk-cdrom.xml
+index 163ce88f19..ccc2716828 100644
+--- a/tests/qemuxml2xmloutdata/disk-cdrom.xml
++++ b/tests/qemuxml2xmloutdata/disk-cdrom.xml
+@@ -23,6 +23,12 @@
+     <disk type='file' device='cdrom'>
+       <driver name='qemu' type='raw'/>
+       <source file='/root/boot.iso'/>
++      <target dev='hdb' bus='ide'/>
++      <readonly/>
++      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
++    </disk>
++    <disk type='file' device='cdrom'>
++      <driver name='qemu' type='raw' cache='none'/>
+       <target dev='hdc' bus='ide'/>
+       <readonly/>
+       <address type='drive' controller='0' bus='1' target='0' unit='0'/>
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-tests-remove-unnecessary-XML-elements-from-hugepages-numa-default.patch b/SOURCES/libvirt-tests-remove-unnecessary-XML-elements-from-hugepages-numa-default.patch
new file mode 100644
index 0000000..b5714d3
--- /dev/null
+++ b/SOURCES/libvirt-tests-remove-unnecessary-XML-elements-from-hugepages-numa-default.patch
@@ -0,0 +1,208 @@
+From 64f5751f38c0a5d31b2e7eb05b8b2de0886e77b7 Mon Sep 17 00:00:00 2001
+Message-Id: <64f5751f38c0a5d31b2e7eb05b8b2de0886e77b7@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:39 +0200
+Subject: [PATCH] tests: remove unnecessary XML elements from
+ hugepages-numa-default
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 335c4a5e26b23d4dcb86ede5a43c5bb8a68b604e)
+
+Conflicts:
+    tests/qemuxml2argvdata/hugepages-numa-default.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ .../hugepages-numa-default.args               | 42 ++---------
+ .../hugepages-numa-default.xml                | 74 +------------------
+ tests/qemuxml2argvtest.c                      |  6 --
+ 3 files changed, 7 insertions(+), 115 deletions(-)
+
+diff --git a/tests/qemuxml2argvdata/hugepages-numa-default.args b/tests/qemuxml2argvdata/hugepages-numa-default.args
+index 20c7802fd8..cc2223aee1 100644
+--- a/tests/qemuxml2argvdata/hugepages-numa-default.args
++++ b/tests/qemuxml2argvdata/hugepages-numa-default.args
+@@ -3,7 +3,7 @@ PATH=/bin \
+ HOME=/home/test \
+ USER=test \
+ LOGNAME=test \
+-QEMU_AUDIO_DRV=spice \
++QEMU_AUDIO_DRV=none \
+ /usr/bin/qemu-system-x86_64 \
+ -name fedora \
+ -S \
+@@ -14,46 +14,14 @@ QEMU_AUDIO_DRV=spice \
+ -mem-path /dev/hugepages2M/libvirt/qemu/-1-fedora \
+ -numa node,nodeid=0,cpus=0-1,mem=1024 \
+ -uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
++-display none \
+ -no-user-config \
+ -nodefaults \
+ -chardev socket,id=charmonitor,path=/tmp/lib/domain--1-fedora/monitor.sock,\
+ server,nowait \
+ -mon chardev=charmonitor,id=monitor,mode=control \
+--rtc base=utc,driftfix=slew \
+--no-hpet \
++-rtc base=utc \
+ -no-shutdown \
+--global PIIX4_PM.disable_s3=1 \
+--global PIIX4_PM.disable_s4=1 \
++-no-acpi \
+ -boot c \
+--device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x6.0x7 \
+--device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,\
+-addr=0x6 \
+--device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x6.0x1 \
+--device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x6.0x2 \
+--device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 \
+--drive file=/var/lib/libvirt/images/fedora.qcow2,format=qcow2,if=none,\
+-id=drive-virtio-disk0 \
+--device virtio-blk-pci,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,\
+-id=virtio-disk0 \
+--drive if=none,id=drive-ide0-0-0,media=cdrom,readonly=on \
+--device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+--chardev socket,id=charchannel0,\
+-path=/var/lib/libvirt/qemu/channel/target/fedora.org.qemu.guest_agent.0,server,\
+-nowait \
+--device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,\
+-id=channel0,name=org.qemu.guest_agent.0 \
+--chardev spicevmc,id=charchannel1,name=vdagent \
+--device virtserialport,bus=virtio-serial0.0,nr=2,chardev=charchannel1,\
+-id=channel1,name=com.redhat.spice.0 \
+--device usb-tablet,id=input0,bus=usb.0,port=1 \
+--spice port=5901,tls-port=5902,addr=127.0.0.1,x509-dir=/etc/pki/libvirt-spice \
+--vga qxl \
+--global qxl-vga.ram_size=67108864 \
+--global qxl-vga.vram_size=67108864 \
+--device intel-hda,id=sound0,bus=pci.0,addr=0x4 \
+--device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \
+--chardev spicevmc,id=charredir0,name=usbredir \
+--device usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=2 \
+--chardev spicevmc,id=charredir1,name=usbredir \
+--device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=3 \
+--device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8
++-usb
+diff --git a/tests/qemuxml2argvdata/hugepages-numa-default.xml b/tests/qemuxml2argvdata/hugepages-numa-default.xml
+index d3c6308be0..6bbd80d515 100644
+--- a/tests/qemuxml2argvdata/hugepages-numa-default.xml
++++ b/tests/qemuxml2argvdata/hugepages-numa-default.xml
+@@ -11,90 +11,20 @@
+     <type arch='x86_64' machine='pc-i440fx-2.3'>hvm</type>
+     <boot dev='hd'/>
+   </os>
+-  <features>
+-    <acpi/>
+-    <apic/>
+-    <pae/>
+-  </features>
+   <cpu>
+     <numa>
+       <cell id='0' cpus='0-1' memory='1048576' unit='KiB'/>
+     </numa>
+   </cpu>
+-  <clock offset='utc'>
+-    <timer name='rtc' tickpolicy='catchup'/>
+-    <timer name='pit' tickpolicy='delay'/>
+-    <timer name='hpet' present='no'/>
+-  </clock>
+   <on_poweroff>destroy</on_poweroff>
+   <on_reboot>restart</on_reboot>
+   <on_crash>restart</on_crash>
+-  <pm>
+-    <suspend-to-mem enabled='no'/>
+-    <suspend-to-disk enabled='no'/>
+-  </pm>
+   <devices>
+     <emulator>/usr/bin/qemu-system-x86_64</emulator>
+-    <disk type='file' device='disk'>
+-      <driver name='qemu' type='qcow2'/>
+-      <source file='/var/lib/libvirt/images/fedora.qcow2'/>
+-      <target dev='vda' bus='virtio'/>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
+-    </disk>
+-    <disk type='block' device='cdrom'>
+-      <driver name='qemu' type='raw'/>
+-      <target dev='hda' bus='ide'/>
+-      <readonly/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+-    <controller type='usb' index='0' model='ich9-ehci1'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/>
+-    </controller>
+-    <controller type='usb' index='0' model='ich9-uhci1'>
+-      <master startport='0'/>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/>
+-    </controller>
+-    <controller type='usb' index='0' model='ich9-uhci2'>
+-      <master startport='2'/>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/>
+-    </controller>
+-    <controller type='usb' index='0' model='ich9-uhci3'>
+-      <master startport='4'/>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/>
+-    </controller>
++    <controller type='usb' index='0'/>
+     <controller type='pci' index='0' model='pci-root'/>
+-    <controller type='ide' index='0'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
+-    </controller>
+-    <controller type='virtio-serial' index='0'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
+-    </controller>
+-    <channel type='unix'>
+-      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/fedora.org.qemu.guest_agent.0'/>
+-      <target type='virtio' name='org.qemu.guest_agent.0'/>
+-      <address type='virtio-serial' controller='0' bus='0' port='1'/>
+-    </channel>
+-    <channel type='spicevmc'>
+-      <target type='virtio' name='com.redhat.spice.0'/>
+-      <address type='virtio-serial' controller='0' bus='0' port='2'/>
+-    </channel>
+-    <input type='tablet' bus='usb'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <graphics type='spice' autoport='yes'/>
+-    <sound model='ich6'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+-    </sound>
+-    <video>
+-      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
+-    </video>
+-    <redirdev bus='usb' type='spicevmc'>
+-    </redirdev>
+-    <redirdev bus='usb' type='spicevmc'>
+-    </redirdev>
+-    <memballoon model='virtio'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
+-    </memballoon>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index bf3fb156a2..19fb7a0931 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -947,12 +947,6 @@ mymain(void)
+ 
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-numa-default",
+-            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
+-            QEMU_CAPS_VIRTIO_SCSI,
+-            QEMU_CAPS_ICH9_USB_EHCI1,
+-            QEMU_CAPS_SPICE,
+-            QEMU_CAPS_DEVICE_QXL,
+-            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_REDIR,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-numa-default-dimm",
+             QEMU_CAPS_DEVICE_PC_DIMM,
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-rename-hugepages-numa-into-hugepages-numa-default.patch b/SOURCES/libvirt-tests-rename-hugepages-numa-into-hugepages-numa-default.patch
new file mode 100644
index 0000000..ece5c23
--- /dev/null
+++ b/SOURCES/libvirt-tests-rename-hugepages-numa-into-hugepages-numa-default.patch
@@ -0,0 +1,48 @@
+From 83ee499377184280b91ce968f98152cb3ab19232 Mon Sep 17 00:00:00 2001
+Message-Id: <83ee499377184280b91ce968f98152cb3ab19232@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:38 +0200
+Subject: [PATCH] tests: rename hugepages-numa into hugepages-numa-default
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 8d89a5c89a765d826ffe39ea657208c91f3e315e)
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ .../{hugepages-numa.args => hugepages-numa-default.args}        | 0
+ .../{hugepages-numa.xml => hugepages-numa-default.xml}          | 0
+ tests/qemuxml2argvtest.c                                        | 2 +-
+ 3 files changed, 1 insertion(+), 1 deletion(-)
+ rename tests/qemuxml2argvdata/{hugepages-numa.args => hugepages-numa-default.args} (100%)
+ rename tests/qemuxml2argvdata/{hugepages-numa.xml => hugepages-numa-default.xml} (100%)
+
+diff --git a/tests/qemuxml2argvdata/hugepages-numa.args b/tests/qemuxml2argvdata/hugepages-numa-default.args
+similarity index 100%
+rename from tests/qemuxml2argvdata/hugepages-numa.args
+rename to tests/qemuxml2argvdata/hugepages-numa-default.args
+diff --git a/tests/qemuxml2argvdata/hugepages-numa.xml b/tests/qemuxml2argvdata/hugepages-numa-default.xml
+similarity index 100%
+rename from tests/qemuxml2argvdata/hugepages-numa.xml
+rename to tests/qemuxml2argvdata/hugepages-numa-default.xml
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index a97b48525a..bf3fb156a2 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -946,7 +946,7 @@ mymain(void)
+     DO_TEST("pmu-feature-off", NONE);
+ 
+     DO_TEST("hugepages-default", NONE);
+-    DO_TEST("hugepages-numa",
++    DO_TEST("hugepages-numa-default",
+             QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
+             QEMU_CAPS_VIRTIO_SCSI,
+             QEMU_CAPS_ICH9_USB_EHCI1,
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-rename-hugepages-pages-into-hugepages-numa-nodeset.patch b/SOURCES/libvirt-tests-rename-hugepages-pages-into-hugepages-numa-nodeset.patch
new file mode 100644
index 0000000..f80af27
--- /dev/null
+++ b/SOURCES/libvirt-tests-rename-hugepages-pages-into-hugepages-numa-nodeset.patch
@@ -0,0 +1,184 @@
+From 3e0f1ade36fd228d822b955aa417a2d81ec137b7 Mon Sep 17 00:00:00 2001
+Message-Id: <3e0f1ade36fd228d822b955aa417a2d81ec137b7@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:41 +0200
+Subject: [PATCH] tests: rename hugepages-pages into hugepages-numa-nodeset
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove unnecessary XML elements as well.
+
+<numatune> for numa guest is tested by numatune-memnode test.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit a83461b09af48dd22ebf7794e66268244387e3f1)
+
+Conflicts:
+    tests/qemuxml2argvdata/hugepages-numa-nodeset.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ ...s-pages.args => hugepages-numa-nodeset.args} | 17 +++++------------
+ ...ges-pages.xml => hugepages-numa-nodeset.xml} | 12 +-----------
+ tests/qemuxml2argvtest.c                        |  2 +-
+ ...ges-pages.xml => hugepages-numa-nodeset.xml} | 17 +----------------
+ tests/qemuxml2xmltest.c                         |  2 +-
+ 5 files changed, 9 insertions(+), 41 deletions(-)
+ rename tests/qemuxml2argvdata/{hugepages-pages.args => hugepages-numa-nodeset.args} (77%)
+ rename tests/qemuxml2argvdata/{hugepages-pages.xml => hugepages-numa-nodeset.xml} (74%)
+ rename tests/qemuxml2xmloutdata/{hugepages-pages.xml => hugepages-numa-nodeset.xml} (66%)
+
+diff --git a/tests/qemuxml2argvdata/hugepages-pages.args b/tests/qemuxml2argvdata/hugepages-numa-nodeset.args
+similarity index 77%
+rename from tests/qemuxml2argvdata/hugepages-pages.args
+rename to tests/qemuxml2argvdata/hugepages-numa-nodeset.args
+index 7ece0272a0..22f0e605fe 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages.args
++++ b/tests/qemuxml2argvdata/hugepages-numa-nodeset.args
+@@ -11,20 +11,16 @@ QEMU_AUDIO_DRV=none \
+ -m 4096 \
+ -smp 4,sockets=4,cores=1,threads=1 \
+ -object memory-backend-file,id=ram-node0,prealloc=yes,\
+-mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
+-host-nodes=0-3,policy=bind \
++mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824 \
+ -numa node,nodeid=0,cpus=0,memdev=ram-node0 \
+ -object memory-backend-file,id=ram-node1,prealloc=yes,\
+-mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
+-host-nodes=0-3,policy=bind \
++mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,size=1073741824 \
+ -numa node,nodeid=1,cpus=1,memdev=ram-node1 \
+ -object memory-backend-file,id=ram-node2,prealloc=yes,\
+-mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
+-host-nodes=0-3,policy=bind \
++mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824 \
+ -numa node,nodeid=2,cpus=2,memdev=ram-node2 \
+ -object memory-backend-file,id=ram-node3,prealloc=yes,\
+-mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
+-host-nodes=3,policy=bind \
++mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824 \
+ -numa node,nodeid=3,cpus=3,memdev=ram-node3 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+@@ -37,7 +33,4 @@ server,nowait \
+ -no-shutdown \
+ -no-acpi \
+ -boot c \
+--usb \
+--drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+--device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+--device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
++-usb
+diff --git a/tests/qemuxml2argvdata/hugepages-pages.xml b/tests/qemuxml2argvdata/hugepages-numa-nodeset.xml
+similarity index 74%
+rename from tests/qemuxml2argvdata/hugepages-pages.xml
+rename to tests/qemuxml2argvdata/hugepages-numa-nodeset.xml
+index f9270782d4..e81fa44d58 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages.xml
++++ b/tests/qemuxml2argvdata/hugepages-numa-nodeset.xml
+@@ -10,10 +10,6 @@
+     </hugepages>
+   </memoryBacking>
+   <vcpu placement='static'>4</vcpu>
+-  <numatune>
+-    <memory mode='strict' nodeset='0-3'/>
+-    <memnode cellid='3' mode='strict' nodeset='3'/>
+-  </numatune>
+   <os>
+     <type arch='i686' machine='pc'>hvm</type>
+     <boot dev='hd'/>
+@@ -32,16 +28,10 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'/>
+-    <controller type='ide' index='0'/>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'/>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index ea26d17a63..3bb5efbd8d 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -954,7 +954,7 @@ mymain(void)
+     DO_TEST("hugepages-numa-default-dimm",
+             QEMU_CAPS_DEVICE_PC_DIMM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+-    DO_TEST("hugepages-pages",
++    DO_TEST("hugepages-numa-nodeset",
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-pages2", QEMU_CAPS_OBJECT_MEMORY_RAM,
+diff --git a/tests/qemuxml2xmloutdata/hugepages-pages.xml b/tests/qemuxml2xmloutdata/hugepages-numa-nodeset.xml
+similarity index 66%
+rename from tests/qemuxml2xmloutdata/hugepages-pages.xml
+rename to tests/qemuxml2xmloutdata/hugepages-numa-nodeset.xml
+index 498610a217..affd124048 100644
+--- a/tests/qemuxml2xmloutdata/hugepages-pages.xml
++++ b/tests/qemuxml2xmloutdata/hugepages-numa-nodeset.xml
+@@ -10,10 +10,6 @@
+     </hugepages>
+   </memoryBacking>
+   <vcpu placement='static'>4</vcpu>
+-  <numatune>
+-    <memory mode='strict' nodeset='0-3'/>
+-    <memnode cellid='3' mode='strict' nodeset='3'/>
+-  </numatune>
+   <os>
+     <type arch='i686' machine='pc'>hvm</type>
+     <boot dev='hd'/>
+@@ -32,23 +28,12 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <driver name='qemu' type='raw'/>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+     </controller>
+-    <controller type='ide' index='0'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
+-    </controller>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+-    </memballoon>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index b4bd9ebc4c..2c3d16495e 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -333,7 +333,7 @@ mymain(void)
+     DO_TEST("pages-discard", NONE);
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+-    DO_TEST("hugepages-pages", NONE);
++    DO_TEST("hugepages-numa-nodeset", NONE);
+     DO_TEST("hugepages-pages2", NONE);
+     DO_TEST("hugepages-pages3", NONE);
+     DO_TEST("hugepages-pages4", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-rename-hugepages-pages2-into-hugepages-numa-default-2M.patch b/SOURCES/libvirt-tests-rename-hugepages-pages2-into-hugepages-numa-default-2M.patch
new file mode 100644
index 0000000..99e2261
--- /dev/null
+++ b/SOURCES/libvirt-tests-rename-hugepages-pages2-into-hugepages-numa-default-2M.patch
@@ -0,0 +1,146 @@
+From b7c7f867e4c46c09acb7c65ff4c5e66564bfa090 Mon Sep 17 00:00:00 2001
+Message-Id: <b7c7f867e4c46c09acb7c65ff4c5e66564bfa090@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:42 +0200
+Subject: [PATCH] tests: rename hugepages-pages2 into hugepages-numa-default-2M
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove unnecessary XML elements as well.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 1abcfa5c17b4ea26f75b2b37281d4990eb6be20f)
+
+Conflicts:
+    tests/qemuxml2argvdata/hugepages-numa-default-2M.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ ...s-pages2.args => hugepages-numa-default-2M.args} |  5 +----
+ ...ges-pages2.xml => hugepages-numa-default-2M.xml} |  8 +-------
+ tests/qemuxml2argvtest.c                            |  5 +++--
+ ...ges-pages2.xml => hugepages-numa-default-2M.xml} | 13 +------------
+ tests/qemuxml2xmltest.c                             |  2 +-
+ 5 files changed, 7 insertions(+), 26 deletions(-)
+ rename tests/qemuxml2argvdata/{hugepages-pages2.args => hugepages-numa-default-2M.args} (77%)
+ rename tests/qemuxml2argvdata/{hugepages-pages2.xml => hugepages-numa-default-2M.xml} (77%)
+ rename tests/qemuxml2xmloutdata/{hugepages-pages2.xml => hugepages-numa-default-2M.xml} (67%)
+
+diff --git a/tests/qemuxml2argvdata/hugepages-pages2.args b/tests/qemuxml2argvdata/hugepages-numa-default-2M.args
+similarity index 77%
+rename from tests/qemuxml2argvdata/hugepages-pages2.args
+rename to tests/qemuxml2argvdata/hugepages-numa-default-2M.args
+index 21105ef844..2dfacefe4a 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages2.args
++++ b/tests/qemuxml2argvdata/hugepages-numa-default-2M.args
+@@ -25,7 +25,4 @@ path=/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \
+ -no-shutdown \
+ -no-acpi \
+ -boot c \
+--usb \
+--drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+--device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+--device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
++-usb
+diff --git a/tests/qemuxml2argvdata/hugepages-pages2.xml b/tests/qemuxml2argvdata/hugepages-numa-default-2M.xml
+similarity index 77%
+rename from tests/qemuxml2argvdata/hugepages-pages2.xml
+rename to tests/qemuxml2argvdata/hugepages-numa-default-2M.xml
+index 3b2d72ef3c..357c77da2a 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages2.xml
++++ b/tests/qemuxml2argvdata/hugepages-numa-default-2M.xml
+@@ -25,16 +25,10 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'/>
+-    <controller type='ide' index='0'/>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'/>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 3bb5efbd8d..6a79918f67 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -951,14 +951,15 @@ mymain(void)
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-numa-default",
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
++    DO_TEST("hugepages-numa-default-2M",
++            QEMU_CAPS_OBJECT_MEMORY_RAM,
++            QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-numa-default-dimm",
+             QEMU_CAPS_DEVICE_PC_DIMM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-numa-nodeset",
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+-    DO_TEST("hugepages-pages2", QEMU_CAPS_OBJECT_MEMORY_RAM,
+-            QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-pages3", QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE,
+             QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+diff --git a/tests/qemuxml2xmloutdata/hugepages-pages2.xml b/tests/qemuxml2xmloutdata/hugepages-numa-default-2M.xml
+similarity index 67%
+rename from tests/qemuxml2xmloutdata/hugepages-pages2.xml
+rename to tests/qemuxml2xmloutdata/hugepages-numa-default-2M.xml
+index cd79960f1b..3777824e1a 100644
+--- a/tests/qemuxml2xmloutdata/hugepages-pages2.xml
++++ b/tests/qemuxml2xmloutdata/hugepages-numa-default-2M.xml
+@@ -25,23 +25,12 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <driver name='qemu' type='raw'/>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+     </controller>
+-    <controller type='ide' index='0'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
+-    </controller>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+-    </memballoon>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index 2c3d16495e..a4448ff168 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -332,9 +332,9 @@ mymain(void)
+ 
+     DO_TEST("pages-discard", NONE);
+     DO_TEST("hugepages-default", NONE);
++    DO_TEST("hugepages-numa-default-2M", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-numa-nodeset", NONE);
+-    DO_TEST("hugepages-pages2", NONE);
+     DO_TEST("hugepages-pages3", NONE);
+     DO_TEST("hugepages-pages4", NONE);
+     DO_TEST("hugepages-pages5", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-rename-hugepages-pages3-into-hugepages-numa-nodeset-part.patch b/SOURCES/libvirt-tests-rename-hugepages-pages3-into-hugepages-numa-nodeset-part.patch
new file mode 100644
index 0000000..508eead
--- /dev/null
+++ b/SOURCES/libvirt-tests-rename-hugepages-pages3-into-hugepages-numa-nodeset-part.patch
@@ -0,0 +1,137 @@
+From c8e971d3757759bcd14a6dc611e563f17e0cd4ed Mon Sep 17 00:00:00 2001
+Message-Id: <c8e971d3757759bcd14a6dc611e563f17e0cd4ed@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:44 +0200
+Subject: [PATCH] tests: rename hugepages-pages3 into
+ hugepages-numa-nodeset-part
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove unnecessary XML elements as well.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 96937ccf265e1dc318bccbde042d0b95b2db30d3)
+
+Conflicts:
+    tests/qemuxml2argvdata/hugepages-numa-nodeset-part.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ ...pages3.args => hugepages-numa-nodeset-part.args} |  5 +----
+ ...s-pages3.xml => hugepages-numa-nodeset-part.xml} |  8 +-------
+ tests/qemuxml2argvtest.c                            |  3 ++-
+ ...s-pages3.xml => hugepages-numa-nodeset-part.xml} | 13 +------------
+ tests/qemuxml2xmltest.c                             |  2 +-
+ 5 files changed, 6 insertions(+), 25 deletions(-)
+ rename tests/qemuxml2argvdata/{hugepages-pages3.args => hugepages-numa-nodeset-part.args} (80%)
+ rename tests/qemuxml2argvdata/{hugepages-pages3.xml => hugepages-numa-nodeset-part.xml} (77%)
+ rename tests/qemuxml2xmloutdata/{hugepages-pages3.xml => hugepages-numa-nodeset-part.xml} (67%)
+
+diff --git a/tests/qemuxml2argvdata/hugepages-pages3.args b/tests/qemuxml2argvdata/hugepages-numa-nodeset-part.args
+similarity index 80%
+rename from tests/qemuxml2argvdata/hugepages-pages3.args
+rename to tests/qemuxml2argvdata/hugepages-numa-nodeset-part.args
+index 2fc701ca22..9999071176 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages3.args
++++ b/tests/qemuxml2argvdata/hugepages-numa-nodeset-part.args
+@@ -26,7 +26,4 @@ path=/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \
+ -no-shutdown \
+ -no-acpi \
+ -boot c \
+--usb \
+--drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+--device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+--device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
++-usb
+diff --git a/tests/qemuxml2argvdata/hugepages-pages3.xml b/tests/qemuxml2argvdata/hugepages-numa-nodeset-part.xml
+similarity index 77%
+rename from tests/qemuxml2argvdata/hugepages-pages3.xml
+rename to tests/qemuxml2argvdata/hugepages-numa-nodeset-part.xml
+index 3d3b3f3cc3..b19bdedb36 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages3.xml
++++ b/tests/qemuxml2argvdata/hugepages-numa-nodeset-part.xml
+@@ -25,16 +25,10 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'/>
+-    <controller type='ide' index='0'/>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'/>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index a95d2c1915..5a41bbe6e0 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -964,7 +964,8 @@ mymain(void)
+     DO_TEST("hugepages-numa-nodeset",
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+-    DO_TEST("hugepages-pages3", QEMU_CAPS_OBJECT_MEMORY_RAM,
++    DO_TEST("hugepages-numa-nodeset-part",
++            QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-shared",
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+diff --git a/tests/qemuxml2xmloutdata/hugepages-pages3.xml b/tests/qemuxml2xmloutdata/hugepages-numa-nodeset-part.xml
+similarity index 67%
+rename from tests/qemuxml2xmloutdata/hugepages-pages3.xml
+rename to tests/qemuxml2xmloutdata/hugepages-numa-nodeset-part.xml
+index be21c3eddd..1230edfd02 100644
+--- a/tests/qemuxml2xmloutdata/hugepages-pages3.xml
++++ b/tests/qemuxml2xmloutdata/hugepages-numa-nodeset-part.xml
+@@ -25,23 +25,12 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <driver name='qemu' type='raw'/>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+     </controller>
+-    <controller type='ide' index='0'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
+-    </controller>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+-    </memballoon>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index 83c0ffdfe2..bb7b0ce481 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -336,7 +336,7 @@ mymain(void)
+     DO_TEST("hugepages-numa-default-2M", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-numa-nodeset", NONE);
+-    DO_TEST("hugepages-pages3", NONE);
++    DO_TEST("hugepages-numa-nodeset-part", NONE);
+     DO_TEST("hugepages-pages4", NONE);
+     DO_TEST("hugepages-pages5", NONE);
+     DO_TEST("hugepages-pages6", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-rename-hugepages-pages4-into-hugepages-numa-nodeset-nonexist.patch b/SOURCES/libvirt-tests-rename-hugepages-pages4-into-hugepages-numa-nodeset-nonexist.patch
new file mode 100644
index 0000000..e3ace08
--- /dev/null
+++ b/SOURCES/libvirt-tests-rename-hugepages-pages4-into-hugepages-numa-nodeset-nonexist.patch
@@ -0,0 +1,125 @@
+From 12dd0446ce6df2388e169e6f33438e538f016e60 Mon Sep 17 00:00:00 2001
+Message-Id: <12dd0446ce6df2388e169e6f33438e538f016e60@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:45 +0200
+Subject: [PATCH] tests: rename hugepages-pages4 into
+ hugepages-numa-nodeset-nonexist
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove unnecessary XML elements as well.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 5534edcb9e0cd462f2bae8acb92bd9b85aa874f0)
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ ....xml => hugepages-numa-nodeset-nonexist.xml} | 17 +----------------
+ tests/qemuxml2argvtest.c                        |  5 +++--
+ .../hugepages-numa-nodeset-nonexist.xml         |  1 +
+ tests/qemuxml2xmloutdata/hugepages-pages4.xml   |  1 -
+ tests/qemuxml2xmltest.c                         |  2 +-
+ 5 files changed, 6 insertions(+), 20 deletions(-)
+ rename tests/qemuxml2argvdata/{hugepages-pages4.xml => hugepages-numa-nodeset-nonexist.xml} (66%)
+ create mode 120000 tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml
+ delete mode 120000 tests/qemuxml2xmloutdata/hugepages-pages4.xml
+
+diff --git a/tests/qemuxml2argvdata/hugepages-pages4.xml b/tests/qemuxml2argvdata/hugepages-numa-nodeset-nonexist.xml
+similarity index 66%
+rename from tests/qemuxml2argvdata/hugepages-pages4.xml
+rename to tests/qemuxml2argvdata/hugepages-numa-nodeset-nonexist.xml
+index 9f79881a59..8211d72be9 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages4.xml
++++ b/tests/qemuxml2argvdata/hugepages-numa-nodeset-nonexist.xml
+@@ -10,10 +10,6 @@
+     </hugepages>
+   </memoryBacking>
+   <vcpu placement='static'>4</vcpu>
+-  <numatune>
+-    <memory mode='strict' nodeset='0-3'/>
+-    <memnode cellid='3' mode='strict' nodeset='3'/>
+-  </numatune>
+   <os>
+     <type arch='i686' machine='pc'>hvm</type>
+     <boot dev='hd'/>
+@@ -32,23 +28,12 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <driver name='qemu' type='raw'/>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+     </controller>
+-    <controller type='ide' index='0'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
+-    </controller>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+-    </memballoon>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 5a41bbe6e0..1b6e8ded43 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -967,12 +967,13 @@ mymain(void)
+     DO_TEST("hugepages-numa-nodeset-part",
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
++    DO_TEST_FAILURE("hugepages-numa-nodeset-nonexist",
++                    QEMU_CAPS_OBJECT_MEMORY_RAM,
++                    QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-shared",
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
+-    DO_TEST_FAILURE("hugepages-pages4",
+-            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-pages5", NONE);
+     DO_TEST("hugepages-pages6", NONE);
+     DO_TEST("hugepages-pages7",
+diff --git a/tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml b/tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml
+new file mode 120000
+index 0000000000..d490edca69
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml
+@@ -0,0 +1 @@
++../qemuxml2argvdata/hugepages-numa-nodeset-nonexist.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmloutdata/hugepages-pages4.xml b/tests/qemuxml2xmloutdata/hugepages-pages4.xml
+deleted file mode 120000
+index 127e66e64f..0000000000
+--- a/tests/qemuxml2xmloutdata/hugepages-pages4.xml
++++ /dev/null
+@@ -1 +0,0 @@
+-../qemuxml2argvdata/hugepages-pages4.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index bb7b0ce481..9b3152821f 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -337,7 +337,7 @@ mymain(void)
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-numa-nodeset", NONE);
+     DO_TEST("hugepages-numa-nodeset-part", NONE);
+-    DO_TEST("hugepages-pages4", NONE);
++    DO_TEST("hugepages-numa-nodeset-nonexist", NONE);
+     DO_TEST("hugepages-pages5", NONE);
+     DO_TEST("hugepages-pages6", NONE);
+     DO_TEST("hugepages-pages7", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-rename-hugepages-pages5-into-hugepages-default-2M.patch b/SOURCES/libvirt-tests-rename-hugepages-pages5-into-hugepages-default-2M.patch
new file mode 100644
index 0000000..eb212d9
--- /dev/null
+++ b/SOURCES/libvirt-tests-rename-hugepages-pages5-into-hugepages-default-2M.patch
@@ -0,0 +1,140 @@
+From b78dc3ab1a744d408803f28658ce3680ae544460 Mon Sep 17 00:00:00 2001
+Message-Id: <b78dc3ab1a744d408803f28658ce3680ae544460@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:46 +0200
+Subject: [PATCH] tests: rename hugepages-pages5 into hugepages-default-2M
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove unnecessary XML elements as well.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 6110770324b42c8af8b4bc40a61d41ccd563f90d)
+
+Conflicts:
+    tests/qemuxml2argvdata/hugepages-default-2M.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ ...epages-pages5.args => hugepages-default-2M.args} |  5 +----
+ ...ugepages-pages5.xml => hugepages-default-2M.xml} | 13 +------------
+ tests/qemuxml2argvtest.c                            |  2 +-
+ tests/qemuxml2xmloutdata/hugepages-default-2M.xml   |  1 +
+ tests/qemuxml2xmloutdata/hugepages-pages5.xml       |  1 -
+ tests/qemuxml2xmltest.c                             |  2 +-
+ 6 files changed, 5 insertions(+), 19 deletions(-)
+ rename tests/qemuxml2argvdata/{hugepages-pages5.args => hugepages-default-2M.args} (75%)
+ rename tests/qemuxml2argvdata/{hugepages-pages5.xml => hugepages-default-2M.xml} (63%)
+ create mode 120000 tests/qemuxml2xmloutdata/hugepages-default-2M.xml
+ delete mode 120000 tests/qemuxml2xmloutdata/hugepages-pages5.xml
+
+diff --git a/tests/qemuxml2argvdata/hugepages-pages5.args b/tests/qemuxml2argvdata/hugepages-default-2M.args
+similarity index 75%
+rename from tests/qemuxml2argvdata/hugepages-pages5.args
+rename to tests/qemuxml2argvdata/hugepages-default-2M.args
+index dc13abed10..d094be1252 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages5.args
++++ b/tests/qemuxml2argvdata/hugepages-default-2M.args
+@@ -23,7 +23,4 @@ path=/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \
+ -no-shutdown \
+ -no-acpi \
+ -boot c \
+--usb \
+--drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+--device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+--device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
++-usb
+diff --git a/tests/qemuxml2argvdata/hugepages-pages5.xml b/tests/qemuxml2argvdata/hugepages-default-2M.xml
+similarity index 63%
+rename from tests/qemuxml2argvdata/hugepages-pages5.xml
+rename to tests/qemuxml2argvdata/hugepages-default-2M.xml
+index f636c186de..ac219a7800 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages5.xml
++++ b/tests/qemuxml2argvdata/hugepages-default-2M.xml
+@@ -19,23 +19,12 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <driver name='qemu' type='raw'/>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+     </controller>
+-    <controller type='ide' index='0'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
+-    </controller>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+-    </memballoon>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 1b6e8ded43..57cfce1b7b 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -953,6 +953,7 @@ mymain(void)
+             QEMU_CAPS_OBJECT_MEMORY_FILE,
+             QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+     DO_TEST("hugepages-default", NONE);
++    DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-numa-default",
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-numa-default-2M",
+@@ -974,7 +975,6 @@ mymain(void)
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
+-    DO_TEST("hugepages-pages5", NONE);
+     DO_TEST("hugepages-pages6", NONE);
+     DO_TEST("hugepages-pages7",
+             QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_OBJECT_MEMORY_FILE,
+diff --git a/tests/qemuxml2xmloutdata/hugepages-default-2M.xml b/tests/qemuxml2xmloutdata/hugepages-default-2M.xml
+new file mode 120000
+index 0000000000..8786948fdd
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/hugepages-default-2M.xml
+@@ -0,0 +1 @@
++../qemuxml2argvdata/hugepages-default-2M.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmloutdata/hugepages-pages5.xml b/tests/qemuxml2xmloutdata/hugepages-pages5.xml
+deleted file mode 120000
+index cfead1c317..0000000000
+--- a/tests/qemuxml2xmloutdata/hugepages-pages5.xml
++++ /dev/null
+@@ -1 +0,0 @@
+-../qemuxml2argvdata/hugepages-pages5.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index 9b3152821f..2f860e548c 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -333,12 +333,12 @@ mymain(void)
+     DO_TEST("pages-discard", NONE);
+     DO_TEST("pages-discard-hugepages", NONE);
+     DO_TEST("hugepages-default", NONE);
++    DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-numa-default-2M", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-numa-nodeset", NONE);
+     DO_TEST("hugepages-numa-nodeset-part", NONE);
+     DO_TEST("hugepages-numa-nodeset-nonexist", NONE);
+-    DO_TEST("hugepages-pages5", NONE);
+     DO_TEST("hugepages-pages6", NONE);
+     DO_TEST("hugepages-pages7", NONE);
+     DO_TEST("hugepages-shared", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-rename-hugepages-pages6-into-hugepages-default-system-size.patch b/SOURCES/libvirt-tests-rename-hugepages-pages6-into-hugepages-default-system-size.patch
new file mode 100644
index 0000000..603472d
--- /dev/null
+++ b/SOURCES/libvirt-tests-rename-hugepages-pages6-into-hugepages-default-system-size.patch
@@ -0,0 +1,141 @@
+From f3f6c5523c0052782dc93a0d4c908a724b14f92f Mon Sep 17 00:00:00 2001
+Message-Id: <f3f6c5523c0052782dc93a0d4c908a724b14f92f@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:47 +0200
+Subject: [PATCH] tests: rename hugepages-pages6 into
+ hugepages-default-system-size
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove unnecessary XML elements as well.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 3d553f4d4bfa94bc0ba4111454a85a0f16cf89c3)
+
+Conflicts:
+    tests/qemuxml2argvdata/hugepages-default-system-size.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ ...ges6.args => hugepages-default-system-size.args} |  5 +----
+ ...pages6.xml => hugepages-default-system-size.xml} | 13 +------------
+ tests/qemuxml2argvtest.c                            |  2 +-
+ .../hugepages-default-system-size.xml               |  1 +
+ tests/qemuxml2xmloutdata/hugepages-pages6.xml       |  1 -
+ tests/qemuxml2xmltest.c                             |  2 +-
+ 6 files changed, 5 insertions(+), 19 deletions(-)
+ rename tests/qemuxml2argvdata/{hugepages-pages6.args => hugepages-default-system-size.args} (72%)
+ rename tests/qemuxml2argvdata/{hugepages-pages6.xml => hugepages-default-system-size.xml} (63%)
+ create mode 120000 tests/qemuxml2xmloutdata/hugepages-default-system-size.xml
+ delete mode 120000 tests/qemuxml2xmloutdata/hugepages-pages6.xml
+
+diff --git a/tests/qemuxml2argvdata/hugepages-pages6.args b/tests/qemuxml2argvdata/hugepages-default-system-size.args
+similarity index 72%
+rename from tests/qemuxml2argvdata/hugepages-pages6.args
+rename to tests/qemuxml2argvdata/hugepages-default-system-size.args
+index 51467c0ae1..eeb7d142ce 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages6.args
++++ b/tests/qemuxml2argvdata/hugepages-default-system-size.args
+@@ -21,7 +21,4 @@ path=/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \
+ -no-shutdown \
+ -no-acpi \
+ -boot c \
+--usb \
+--drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+--device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+--device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
++-usb
+diff --git a/tests/qemuxml2argvdata/hugepages-pages6.xml b/tests/qemuxml2argvdata/hugepages-default-system-size.xml
+similarity index 63%
+rename from tests/qemuxml2argvdata/hugepages-pages6.xml
+rename to tests/qemuxml2argvdata/hugepages-default-system-size.xml
+index fc4f57fbc0..8a809ead5e 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages6.xml
++++ b/tests/qemuxml2argvdata/hugepages-default-system-size.xml
+@@ -19,23 +19,12 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <driver name='qemu' type='raw'/>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+     </controller>
+-    <controller type='ide' index='0'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
+-    </controller>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+-    </memballoon>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 57cfce1b7b..1aab23408d 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -954,6 +954,7 @@ mymain(void)
+             QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-default-2M", NONE);
++    DO_TEST("hugepages-default-system-size", NONE);
+     DO_TEST("hugepages-numa-default",
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-numa-default-2M",
+@@ -975,7 +976,6 @@ mymain(void)
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
+-    DO_TEST("hugepages-pages6", NONE);
+     DO_TEST("hugepages-pages7",
+             QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_OBJECT_MEMORY_FILE,
+             QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+diff --git a/tests/qemuxml2xmloutdata/hugepages-default-system-size.xml b/tests/qemuxml2xmloutdata/hugepages-default-system-size.xml
+new file mode 120000
+index 0000000000..e64e3fb282
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/hugepages-default-system-size.xml
+@@ -0,0 +1 @@
++../qemuxml2argvdata/hugepages-default-system-size.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmloutdata/hugepages-pages6.xml b/tests/qemuxml2xmloutdata/hugepages-pages6.xml
+deleted file mode 120000
+index 584b7c92c8..0000000000
+--- a/tests/qemuxml2xmloutdata/hugepages-pages6.xml
++++ /dev/null
+@@ -1 +0,0 @@
+-../qemuxml2argvdata/hugepages-pages6.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index 2f860e548c..a3555b348e 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -334,12 +334,12 @@ mymain(void)
+     DO_TEST("pages-discard-hugepages", NONE);
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-default-2M", NONE);
++    DO_TEST("hugepages-default-system-size", NONE);
+     DO_TEST("hugepages-numa-default-2M", NONE);
+     DO_TEST("hugepages-numa-default-dimm", NONE);
+     DO_TEST("hugepages-numa-nodeset", NONE);
+     DO_TEST("hugepages-numa-nodeset-part", NONE);
+     DO_TEST("hugepages-numa-nodeset-nonexist", NONE);
+-    DO_TEST("hugepages-pages6", NONE);
+     DO_TEST("hugepages-pages7", NONE);
+     DO_TEST("hugepages-shared", NONE);
+     DO_TEST("hugepages-memaccess", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-rename-hugepages-pages7-into-pages-dimm-discard.patch b/SOURCES/libvirt-tests-rename-hugepages-pages7-into-pages-dimm-discard.patch
new file mode 100644
index 0000000..0916207
--- /dev/null
+++ b/SOURCES/libvirt-tests-rename-hugepages-pages7-into-pages-dimm-discard.patch
@@ -0,0 +1,189 @@
+From bafa9aa0fb88ceb6ed672d534195f268b8da5e51 Mon Sep 17 00:00:00 2001
+Message-Id: <bafa9aa0fb88ceb6ed672d534195f268b8da5e51@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:48 +0200
+Subject: [PATCH] tests: rename hugepages-pages7 into pages-dimm-discard
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove unnecessary XML elements as well.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 7e0ac26867da8b3b1464b7649a53fdd6dde8d9ab)
+
+Conflicts:
+    tests/qemuxml2argvdata/pages-dimm-discard.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ ...ges-pages7.args => pages-dimm-discard.args} | 16 +++++-----------
+ ...pages-pages7.xml => pages-dimm-discard.xml} | 18 +-----------------
+ tests/qemuxml2argvtest.c                       |  7 ++++---
+ tests/qemuxml2xmloutdata/hugepages-pages7.xml  |  1 -
+ .../qemuxml2xmloutdata/pages-dimm-discard.xml  |  1 +
+ tests/qemuxml2xmltest.c                        |  2 +-
+ 6 files changed, 12 insertions(+), 33 deletions(-)
+ rename tests/qemuxml2argvdata/{hugepages-pages7.args => pages-dimm-discard.args} (65%)
+ rename tests/qemuxml2argvdata/{hugepages-pages7.xml => pages-dimm-discard.xml} (73%)
+ delete mode 120000 tests/qemuxml2xmloutdata/hugepages-pages7.xml
+ create mode 120000 tests/qemuxml2xmloutdata/pages-dimm-discard.xml
+
+diff --git a/tests/qemuxml2argvdata/hugepages-pages7.args b/tests/qemuxml2argvdata/pages-dimm-discard.args
+similarity index 65%
+rename from tests/qemuxml2argvdata/hugepages-pages7.args
+rename to tests/qemuxml2argvdata/pages-dimm-discard.args
+index 02a98026eb..97184e074a 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages7.args
++++ b/tests/qemuxml2argvdata/pages-dimm-discard.args
+@@ -10,16 +10,14 @@ QEMU_AUDIO_DRV=none \
+ -machine pc-i440fx-2.3,accel=tcg,usb=off,dump-guest-core=off \
+ -m size=1048576k,slots=16,maxmem=1099511627776k \
+ -smp 2,sockets=2,cores=1,threads=1 \
+--mem-prealloc \
+--mem-path /dev/hugepages2M/libvirt/qemu/-1-fedora \
+ -numa node,nodeid=0,cpus=0-1,mem=1024 \
+ -object memory-backend-file,id=memdimm0,prealloc=yes,\
+ mem-path=/dev/hugepages1G/libvirt/qemu/-1-fedora,size=1073741824,\
+ host-nodes=1-3,policy=bind \
+ -device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
+--object memory-backend-file,id=memdimm1,prealloc=yes,\
+-mem-path=/dev/hugepages2M/libvirt/qemu/-1-fedora,discard-data=yes,share=no,\
+-size=536870912 \
++-object memory-backend-file,id=memdimm1,\
++mem-path=/var/lib/libvirt/qemu/ram/libvirt/qemu/-1-fedora/dimm1,\
++discard-data=yes,share=no,size=536870912 \
+ -device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
+ -uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
+ -display none \
+@@ -30,10 +28,6 @@ server,nowait \
+ -mon chardev=charmonitor,id=monitor,mode=control \
+ -rtc base=utc \
+ -no-shutdown \
++-no-acpi \
+ -boot c \
+--usb \
+--drive file=/var/lib/libvirt/images/fedora.qcow2,format=qcow2,if=none,\
+-id=drive-virtio-disk0 \
+--device virtio-blk-pci,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,\
+-id=virtio-disk0 \
+--device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
++-usb
+diff --git a/tests/qemuxml2argvdata/hugepages-pages7.xml b/tests/qemuxml2argvdata/pages-dimm-discard.xml
+similarity index 73%
+rename from tests/qemuxml2argvdata/hugepages-pages7.xml
+rename to tests/qemuxml2argvdata/pages-dimm-discard.xml
+index 28c72f85a7..3d233687e1 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages7.xml
++++ b/tests/qemuxml2argvdata/pages-dimm-discard.xml
+@@ -4,19 +4,11 @@
+   <maxMemory slots='16' unit='KiB'>1099511627776</maxMemory>
+   <memory unit='KiB'>2621439</memory>
+   <currentMemory unit='KiB'>2621439</currentMemory>
+-  <memoryBacking>
+-    <hugepages/>
+-  </memoryBacking>
+   <vcpu placement='static'>2</vcpu>
+   <os>
+     <type arch='x86_64' machine='pc-i440fx-2.3'>hvm</type>
+     <boot dev='hd'/>
+   </os>
+-  <features>
+-    <acpi/>
+-    <apic/>
+-    <pae/>
+-  </features>
+   <cpu>
+     <numa>
+       <cell id='0' cpus='0-1' memory='1048576' unit='KiB'/>
+@@ -28,21 +20,13 @@
+   <on_crash>restart</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-x86_64</emulator>
+-    <disk type='file' device='disk'>
+-      <driver name='qemu' type='qcow2'/>
+-      <source file='/var/lib/libvirt/images/fedora.qcow2'/>
+-      <target dev='vda' bus='virtio'/>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
+-    </disk>
+     <controller type='usb' index='0'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+     </controller>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+-    </memballoon>
++    <memballoon model='none'/>
+     <memory model='dimm' discard='no'>
+       <source>
+         <nodemask>1-3</nodemask>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 1aab23408d..f8fbca1806 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -952,6 +952,10 @@ mymain(void)
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE,
+             QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
++    DO_TEST("pages-dimm-discard",
++            QEMU_CAPS_DEVICE_PC_DIMM,
++            QEMU_CAPS_OBJECT_MEMORY_FILE,
++            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
+@@ -976,9 +980,6 @@ mymain(void)
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
+-    DO_TEST("hugepages-pages7",
+-            QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_OBJECT_MEMORY_FILE,
+-            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+     DO_TEST_FAILURE("hugepages-pages8",
+                     QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_OBJECT_MEMORY_FILE,
+                     QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+diff --git a/tests/qemuxml2xmloutdata/hugepages-pages7.xml b/tests/qemuxml2xmloutdata/hugepages-pages7.xml
+deleted file mode 120000
+index b4ce4defda..0000000000
+--- a/tests/qemuxml2xmloutdata/hugepages-pages7.xml
++++ /dev/null
+@@ -1 +0,0 @@
+-../qemuxml2argvdata/hugepages-pages7.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmloutdata/pages-dimm-discard.xml b/tests/qemuxml2xmloutdata/pages-dimm-discard.xml
+new file mode 120000
+index 0000000000..05bbef8d65
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/pages-dimm-discard.xml
+@@ -0,0 +1 @@
++../qemuxml2argvdata/pages-dimm-discard.xml
+\ No newline at end of file
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index a3555b348e..6afc48f98e 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -332,6 +332,7 @@ mymain(void)
+ 
+     DO_TEST("pages-discard", NONE);
+     DO_TEST("pages-discard-hugepages", NONE);
++    DO_TEST("pages-dimm-discard", NONE);
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
+@@ -340,7 +341,6 @@ mymain(void)
+     DO_TEST("hugepages-numa-nodeset", NONE);
+     DO_TEST("hugepages-numa-nodeset-part", NONE);
+     DO_TEST("hugepages-numa-nodeset-nonexist", NONE);
+-    DO_TEST("hugepages-pages7", NONE);
+     DO_TEST("hugepages-shared", NONE);
+     DO_TEST("hugepages-memaccess", NONE);
+     DO_TEST("hugepages-memaccess2", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-rename-hugepages-pages8-into-hugepages-nodeset-nonexist.patch b/SOURCES/libvirt-tests-rename-hugepages-pages8-into-hugepages-nodeset-nonexist.patch
new file mode 100644
index 0000000..144909c
--- /dev/null
+++ b/SOURCES/libvirt-tests-rename-hugepages-pages8-into-hugepages-nodeset-nonexist.patch
@@ -0,0 +1,85 @@
+From b62a8d7fc457babdc57a93264fb8f75f8ecf7369 Mon Sep 17 00:00:00 2001
+Message-Id: <b62a8d7fc457babdc57a93264fb8f75f8ecf7369@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:49 +0200
+Subject: [PATCH] tests: rename hugepages-pages8 into
+ hugepages-nodeset-nonexist
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove unnecessary XML elements as well.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 67cffcbbdb4a7dcdc10681695e00615ffae8e726)
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ ...es-pages8.xml => hugepages-nodeset-nonexist.xml} | 13 +------------
+ tests/qemuxml2argvtest.c                            |  7 ++++---
+ 2 files changed, 5 insertions(+), 15 deletions(-)
+ rename tests/qemuxml2argvdata/{hugepages-pages8.xml => hugepages-nodeset-nonexist.xml} (64%)
+
+diff --git a/tests/qemuxml2argvdata/hugepages-pages8.xml b/tests/qemuxml2argvdata/hugepages-nodeset-nonexist.xml
+similarity index 64%
+rename from tests/qemuxml2argvdata/hugepages-pages8.xml
+rename to tests/qemuxml2argvdata/hugepages-nodeset-nonexist.xml
+index 4cf4c1a8ad..477d3f1f2b 100644
+--- a/tests/qemuxml2argvdata/hugepages-pages8.xml
++++ b/tests/qemuxml2argvdata/hugepages-nodeset-nonexist.xml
+@@ -19,23 +19,12 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <driver name='qemu' type='raw'/>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+     </controller>
+-    <controller type='ide' index='0'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
+-    </controller>
+     <controller type='pci' index='0' model='pci-root'/>
+     <input type='mouse' bus='ps2'/>
+     <input type='keyboard' bus='ps2'/>
+-    <memballoon model='virtio'>
+-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+-    </memballoon>
++    <memballoon model='none'/>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index f8fbca1806..d4251eff3e 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -959,6 +959,10 @@ mymain(void)
+     DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-default-2M", NONE);
+     DO_TEST("hugepages-default-system-size", NONE);
++    DO_TEST_FAILURE("hugepages-nodeset-nonexist",
++                    QEMU_CAPS_DEVICE_PC_DIMM,
++                    QEMU_CAPS_OBJECT_MEMORY_FILE,
++                    QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+     DO_TEST("hugepages-numa-default",
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST("hugepages-numa-default-2M",
+@@ -980,9 +984,6 @@ mymain(void)
+             QEMU_CAPS_OBJECT_MEMORY_RAM,
+             QEMU_CAPS_OBJECT_MEMORY_FILE);
+     DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
+-    DO_TEST_FAILURE("hugepages-pages8",
+-                    QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_OBJECT_MEMORY_FILE,
+-                    QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+     DO_TEST("hugepages-memaccess", QEMU_CAPS_OBJECT_MEMORY_FILE,
+             QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
+             QEMU_CAPS_NUMA);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-rename-hugepages-to-hugepages-default.patch b/SOURCES/libvirt-tests-rename-hugepages-to-hugepages-default.patch
new file mode 100644
index 0000000..f9a0aa4
--- /dev/null
+++ b/SOURCES/libvirt-tests-rename-hugepages-to-hugepages-default.patch
@@ -0,0 +1,115 @@
+From 29e9e0e5601599b9246a9365ca5ff123e2534fdd Mon Sep 17 00:00:00 2001
+Message-Id: <29e9e0e5601599b9246a9365ca5ff123e2534fdd@dist-git>
+From: Pavel Hrdina <phrdina@redhat.com>
+Date: Mon, 13 Aug 2018 19:21:36 +0200
+Subject: [PATCH] tests: rename hugepages to hugepages-default
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove unnecessary XML elements as well.
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+(cherry picked from commit 47b8c6a04af38d38cd5d425b65d052623d1e35ba)
+
+Conflicts:
+    tests/qemuxml2argvdata/hugepages-default.args
+        - missing upstream commit <caccbba64a>
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1615461
+
+Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ .../{hugepages.args => hugepages-default.args}              | 2 --
+ .../{hugepages.xml => hugepages-default.xml}                | 5 -----
+ tests/qemuxml2argvtest.c                                    | 2 +-
+ .../{hugepages.xml => hugepages-default.xml}                | 6 ------
+ tests/qemuxml2xmltest.c                                     | 2 +-
+ 5 files changed, 2 insertions(+), 15 deletions(-)
+ rename tests/qemuxml2argvdata/{hugepages.args => hugepages-default.args} (82%)
+ rename tests/qemuxml2argvdata/{hugepages.xml => hugepages-default.xml} (79%)
+ rename tests/qemuxml2xmloutdata/{hugepages.xml => hugepages-default.xml} (82%)
+
+diff --git a/tests/qemuxml2argvdata/hugepages.args b/tests/qemuxml2argvdata/hugepages-default.args
+similarity index 82%
+rename from tests/qemuxml2argvdata/hugepages.args
+rename to tests/qemuxml2argvdata/hugepages-default.args
+index ea61ba930e..115da3ea35 100644
+--- a/tests/qemuxml2argvdata/hugepages.args
++++ b/tests/qemuxml2argvdata/hugepages-default.args
+@@ -24,6 +24,4 @@ server,nowait \
+ -no-acpi \
+ -boot c \
+ -usb \
+--drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+--device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
+diff --git a/tests/qemuxml2argvdata/hugepages.xml b/tests/qemuxml2argvdata/hugepages-default.xml
+similarity index 79%
+rename from tests/qemuxml2argvdata/hugepages.xml
+rename to tests/qemuxml2argvdata/hugepages-default.xml
+index 2e65902f1c..99f53828fe 100644
+--- a/tests/qemuxml2argvdata/hugepages.xml
++++ b/tests/qemuxml2argvdata/hugepages-default.xml
+@@ -17,11 +17,6 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'/>
+     <controller type='ide' index='0'/>
+     <controller type='pci' index='0' model='pci-root'/>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 3cff4ffb5e..01553ada38 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -945,7 +945,7 @@ mymain(void)
+     DO_TEST("pmu-feature", NONE);
+     DO_TEST("pmu-feature-off", NONE);
+ 
+-    DO_TEST("hugepages", NONE);
++    DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-numa",
+             QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
+             QEMU_CAPS_VIRTIO_SCSI,
+diff --git a/tests/qemuxml2xmloutdata/hugepages.xml b/tests/qemuxml2xmloutdata/hugepages-default.xml
+similarity index 82%
+rename from tests/qemuxml2xmloutdata/hugepages.xml
+rename to tests/qemuxml2xmloutdata/hugepages-default.xml
+index f78ca95c1b..40043434ee 100644
+--- a/tests/qemuxml2xmloutdata/hugepages.xml
++++ b/tests/qemuxml2xmloutdata/hugepages-default.xml
+@@ -17,12 +17,6 @@
+   <on_crash>destroy</on_crash>
+   <devices>
+     <emulator>/usr/bin/qemu-system-i686</emulator>
+-    <disk type='block' device='disk'>
+-      <driver name='qemu' type='raw'/>
+-      <source dev='/dev/HostVG/QEMUGuest1'/>
+-      <target dev='hda' bus='ide'/>
+-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+-    </disk>
+     <controller type='usb' index='0'>
+       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+     </controller>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index e35644d479..f0cabc422d 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -330,7 +330,7 @@ mymain(void)
+     DO_TEST("pmu-feature", NONE);
+     DO_TEST("pmu-feature-off", NONE);
+ 
+-    DO_TEST("hugepages", NONE);
++    DO_TEST("hugepages-default", NONE);
+     DO_TEST("hugepages-pages", NONE);
+     DO_TEST("hugepages-pages2", NONE);
+     DO_TEST("hugepages-pages3", NONE);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tests-sev-Test-launch-security-with-specific-QEMU-version.patch b/SOURCES/libvirt-tests-sev-Test-launch-security-with-specific-QEMU-version.patch
new file mode 100644
index 0000000..eceb6a6
--- /dev/null
+++ b/SOURCES/libvirt-tests-sev-Test-launch-security-with-specific-QEMU-version.patch
@@ -0,0 +1,101 @@
+From 3984480fb9a20cd47de94db3f0246c90eb8c3c14 Mon Sep 17 00:00:00 2001
+Message-Id: <3984480fb9a20cd47de94db3f0246c90eb8c3c14@dist-git>
+From: Erik Skultety <eskultet@redhat.com>
+Date: Mon, 20 Aug 2018 17:18:51 +0200
+Subject: [PATCH] tests: sev: Test launch-security with specific QEMU version
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In order to test SEV we need real QEMU capabilities. Ideally, this would
+be tested with -latest capabilities, however, our capabilities are
+currently tied to Intel HW, even the 2.12.0 containing SEV were edited by
+hand, so we can only use that one for now, as splitting the capabilities
+according to the vendor is a refactor for another day. The need for real
+capabilities comes from the extended SEV platform data (PDH, cbitpos,
+etc.) we'll need to cache/parse.
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Acked-by: Peter Krempa <pkrempa@redhat.com>
+(cherry picked from commit 6c50cef8a3e4e3407fb42a713a353e42ae3f2bc6)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1612009
+https://bugzilla.redhat.com/show_bug.cgi?id=1619150
+
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+
+ Conflicts:
+	tests/qemuxml2argvdata/launch-security-sev.x86_64-2.12.0.args
+            - this wasn't a 100% clean file rename and git doesn't like
+            that
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ ...=> launch-security-sev.x86_64-2.12.0.args} | 19 ++++++++++++-------
+ tests/qemuxml2argvtest.c                      |  4 +---
+ 2 files changed, 13 insertions(+), 10 deletions(-)
+ rename tests/qemuxml2argvdata/{launch-security-sev.args => launch-security-sev.x86_64-2.12.0.args} (54%)
+
+diff --git a/tests/qemuxml2argvdata/launch-security-sev.args b/tests/qemuxml2argvdata/launch-security-sev.x86_64-2.12.0.args
+similarity index 54%
+rename from tests/qemuxml2argvdata/launch-security-sev.args
+rename to tests/qemuxml2argvdata/launch-security-sev.x86_64-2.12.0.args
+index db0be1a27d..6da068e1a5 100644
+--- a/tests/qemuxml2argvdata/launch-security-sev.args
++++ b/tests/qemuxml2argvdata/launch-security-sev.x86_64-2.12.0.args
+@@ -5,25 +5,30 @@ USER=test \
+ LOGNAME=test \
+ QEMU_AUDIO_DRV=none \
+ /usr/bin/qemu-system-x86_64 \
+--name QEMUGuest1 \
++-name guest=QEMUGuest1,debug-threads=on \
+ -S \
++-object secret,id=masterKey0,format=raw,\
++file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
+ -machine pc-1.0,accel=kvm,usb=off,dump-guest-core=off,memory-encryption=sev0 \
+ -m 214 \
++-realtime mlock=off \
+ -smp 1,sockets=1,cores=1,threads=1 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+ -nodefaults \
+--chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
+-server,nowait \
++-chardev socket,id=charmonitor,fd=1729,server,nowait \
+ -mon chardev=charmonitor,id=monitor,mode=control \
+ -rtc base=utc \
+ -no-shutdown \
+ -no-acpi \
+--boot c \
+--usb \
++-boot strict=on \
++-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
+ -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+--device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
++-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
+ -object sev-guest,id=sev0,cbitpos=47,reduced-phys-bits=1,policy=0x1,\
+ dh-cert-file=/tmp/lib/domain--1-QEMUGuest1/dh_cert.base64,\
+-session-file=/tmp/lib/domain--1-QEMUGuest1/session.base64
++session-file=/tmp/lib/domain--1-QEMUGuest1/session.base64 \
++-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
++resourcecontrol=deny \
++-msg timestamp=on
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index e6c0120670..02bb9889ee 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -2950,9 +2950,7 @@ mymain(void)
+     DO_TEST_CAPS_LATEST("vhost-vsock");
+     DO_TEST_CAPS_LATEST("vhost-vsock-auto");
+ 
+-    DO_TEST("launch-security-sev",
+-            QEMU_CAPS_KVM,
+-            QEMU_CAPS_SEV_GUEST);
++    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
+ 
+     if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
+         virFileDeleteTree(fakerootdir);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-tools-Fix-typo-generating-adapter_wwpn-field.patch b/SOURCES/libvirt-tools-Fix-typo-generating-adapter_wwpn-field.patch
new file mode 100644
index 0000000..499251f
--- /dev/null
+++ b/SOURCES/libvirt-tools-Fix-typo-generating-adapter_wwpn-field.patch
@@ -0,0 +1,35 @@
+From 840579c84fd2fb59a1f141892d18ae86f9772cdf Mon Sep 17 00:00:00 2001
+Message-Id: <840579c84fd2fb59a1f141892d18ae86f9772cdf@dist-git>
+From: John Ferlan <jferlan@redhat.com>
+Date: Fri, 20 Jul 2018 07:52:12 -0400
+Subject: [PATCH] tools: Fix typo generating adapter_wwpn field
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1601377
+
+Fix typo from commit id d45bee449 for the parent_wwpn field
+resulting in parent_wwnn being printed twice.
+
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 313eaae3b5a4f9b1e94b153759b878614caecf34)
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+---
+ tools/virsh-pool.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/virsh-pool.c b/tools/virsh-pool.c
+index cc49a5b96d..6faff781b2 100644
+--- a/tools/virsh-pool.c
++++ b/tools/virsh-pool.c
+@@ -371,7 +371,7 @@ virshBuildPoolXML(vshControl *ctl,
+             if (adapterParent)
+                 virBufferAsprintf(&buf, " parent='%s'", adapterParent);
+             else if (adapterParentWwnn && adapterParentWwpn)
+-                virBufferAsprintf(&buf, " parent_wwnn='%s' parent_wwnn='%s'",
++                virBufferAsprintf(&buf, " parent_wwnn='%s' parent_wwpn='%s'",
+                                   adapterParentWwnn, adapterParentWwpn);
+             else if (adapterParentFabricWwn)
+                 virBufferAsprintf(&buf, " parent_fabric_wwn='%s'",
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-util-Don-t-overflow-in-virRandomBits.patch b/SOURCES/libvirt-util-Don-t-overflow-in-virRandomBits.patch
new file mode 100644
index 0000000..6afe595
--- /dev/null
+++ b/SOURCES/libvirt-util-Don-t-overflow-in-virRandomBits.patch
@@ -0,0 +1,44 @@
+From f341ec3a1077c2d876ece271e5f58aa8d3ef795a Mon Sep 17 00:00:00 2001
+Message-Id: <f341ec3a1077c2d876ece271e5f58aa8d3ef795a@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Mon, 3 Dec 2018 08:46:18 -0500
+Subject: [PATCH] util: Don't overflow in virRandomBits
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1655586 [RHEL8]
+https://bugzilla.redhat.com/show_bug.cgi?id=1652894 [RHEL7]
+
+The function is supposed to return up to 64bit long integer. In
+order to do that it calls virRandomBytes() to fill the integer
+with random bytes and then masks out everything but requested
+bits. However, when doing that it shifts 1U and not 1ULL. So
+effectively, requesting 32 random bis or more always return 0
+which is not random enough.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+Reviewed-by: Pino Toscano <ptoscano@redhat.com>
+(cherry picked from commit 78c47a92ecb450c9f8bcabd35da7006dc2547882)
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+---
+ src/util/virrandom.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/util/virrandom.c b/src/util/virrandom.c
+index 01cc82a052..3c011a8615 100644
+--- a/src/util/virrandom.c
++++ b/src/util/virrandom.c
+@@ -68,7 +68,7 @@ uint64_t virRandomBits(int nbits)
+         return 0;
+     }
+ 
+-    ret &= (1U << nbits) - 1;
++    ret &= (1ULL << nbits) - 1;
+     return ret;
+ }
+ 
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-util-Rewrite-virHostCPUCountThreadSiblings.patch b/SOURCES/libvirt-util-Rewrite-virHostCPUCountThreadSiblings.patch
new file mode 100644
index 0000000..62b0d8e
--- /dev/null
+++ b/SOURCES/libvirt-util-Rewrite-virHostCPUCountThreadSiblings.patch
@@ -0,0 +1,91 @@
+From 60e8b0492c1412f03188453cae1b9b8729d69745 Mon Sep 17 00:00:00 2001
+Message-Id: <60e8b0492c1412f03188453cae1b9b8729d69745@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Wed, 15 Aug 2018 14:04:42 +0200
+Subject: [PATCH] util: Rewrite virHostCPUCountThreadSiblings()
+
+We already have a function which parses
+thread_siblings_list for a CPU and returns the
+corresponding bitmap, and a bunch of utility functions
+that perform operations on bitmaps such as counting
+the number of set bits: use those to implement the
+function instead of having an additional ad-hoc parser
+for thread_siblings.
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit 794513e89d0dbd9a1b30f3745007bcfdb740d890)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1608479
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virhostcpu.c | 45 +++++++++++++++----------------------------
+ 1 file changed, 16 insertions(+), 29 deletions(-)
+
+diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
+index 013c95bb56..b644398e00 100644
+--- a/src/util/virhostcpu.c
++++ b/src/util/virhostcpu.c
+@@ -201,35 +201,6 @@ virHostCPUGetStatsFreeBSD(int cpuNum,
+ 
+ # define LINUX_NB_CPU_STATS 4
+ 
+-
+-static unsigned long
+-virHostCPUCountThreadSiblings(unsigned int cpu)
+-{
+-    unsigned long ret = 0;
+-    int rv = -1;
+-    char *str = NULL;
+-    size_t i;
+-
+-    rv = virFileReadValueString(&str,
+-                                "%s/cpu/cpu%u/topology/thread_siblings",
+-                                SYSFS_SYSTEM_PATH, cpu);
+-    if (rv == -2) {
+-        ret = 1;
+-        goto cleanup;
+-    }
+-    if (rv < 0)
+-        goto cleanup;
+-
+-    for (i = 0; str[i] != '\0'; i++) {
+-        if (c_isxdigit(str[i]))
+-            ret += count_one_bits(virHexToBin(str[i]));
+-    }
+-
+- cleanup:
+-    VIR_FREE(str);
+-    return ret;
+-}
+-
+ int
+ virHostCPUGetSocket(unsigned int cpu, unsigned int *socket)
+ {
+@@ -290,6 +261,22 @@ virHostCPUGetSiblingsList(unsigned int cpu)
+     return ret;
+ }
+ 
++static unsigned long
++virHostCPUCountThreadSiblings(unsigned int cpu)
++{
++    virBitmapPtr siblings_map;
++    unsigned long ret = 0;
++
++    if (!(siblings_map = virHostCPUGetSiblingsList(cpu)))
++        goto cleanup;
++
++    ret = virBitmapCountBits(siblings_map);
++
++ cleanup:
++    virBitmapFree(siblings_map);
++    return ret;
++}
++
+ /* parses a node entry, returning number of processors in the node and
+  * filling arguments */
+ static int
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-util-add-a-function-to-insert-new-interfaces-to-IPv6CheckForwarding-list.patch b/SOURCES/libvirt-util-add-a-function-to-insert-new-interfaces-to-IPv6CheckForwarding-list.patch
new file mode 100644
index 0000000..7ca96ce
--- /dev/null
+++ b/SOURCES/libvirt-util-add-a-function-to-insert-new-interfaces-to-IPv6CheckForwarding-list.patch
@@ -0,0 +1,82 @@
+From 665a535028d1512e2afabf3c2c1cc100debfa7d7 Mon Sep 17 00:00:00 2001
+Message-Id: <665a535028d1512e2afabf3c2c1cc100debfa7d7@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Mon, 14 Jan 2019 11:35:03 -0500
+Subject: [PATCH] util: add a function to insert new interfaces to
+ IPv6CheckForwarding list
+
+This same operation needs to be done in multiple places, so move the
+inline code into a separate function.
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 37bb6facfc467179d6cfe6186ad6d5a55285c2c7)
+
+https://bugzilla.redhat.com/1583131
+
+Conflicts: src/util/virnetdevip.c - introduction of VIR_AUTOPTR upstream led to
+     conflicts in surrounding context, and elimination of cleanup and
+     error labels.
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virnetdevip.c | 29 ++++++++++++++++++++---------
+ 1 file changed, 20 insertions(+), 9 deletions(-)
+
+diff --git a/src/util/virnetdevip.c b/src/util/virnetdevip.c
+index 1bfbd20034..937ebcdbdb 100644
+--- a/src/util/virnetdevip.c
++++ b/src/util/virnetdevip.c
+@@ -539,6 +539,25 @@ struct virNetDevIPCheckIPv6ForwardingData {
+     size_t ndevices;
+ };
+ 
++
++static int
++virNetDevIPCheckIPv6ForwardingAddIF(struct virNetDevIPCheckIPv6ForwardingData *data,
++                                    char **ifname)
++{
++    size_t i;
++
++    /* add ifname to the array if it's not already there
++     * (ifname is char** so VIR_APPEND_ELEMENT() will move the
++     * original pointer out of the way and avoid having it freed)
++     */
++    for (i = 0; i < data->ndevices; i++) {
++        if (STREQ(data->devices[i], *ifname))
++            return 0;
++    }
++    return VIR_APPEND_ELEMENT(data->devices, data->ndevices, *ifname);
++}
++
++
+ static int
+ virNetDevIPCheckIPv6ForwardingCallback(struct nlmsghdr *resp,
+                                        void *opaque)
+@@ -551,8 +570,6 @@ virNetDevIPCheckIPv6ForwardingCallback(struct nlmsghdr *resp,
+     int ret = 0;
+     int len = RTM_PAYLOAD(resp);
+     int oif = -1;
+-    size_t i;
+-    bool hasDevice;
+ 
+     /* Ignore messages other than route ones */
+     if (resp->nlmsg_type != RTM_NEWROUTE)
+@@ -589,13 +606,7 @@ virNetDevIPCheckIPv6ForwardingCallback(struct nlmsghdr *resp,
+     accept_ra = virNetDevIPGetAcceptRA(ifname);
+     VIR_DEBUG("Checking route for device %s, accept_ra: %d", ifname, accept_ra);
+ 
+-    hasDevice = false;
+-    for (i = 0; i < data->ndevices && !hasDevice; i++) {
+-        if (STREQ(data->devices[i], ifname))
+-            hasDevice = true;
+-    }
+-    if (accept_ra != 2 && !hasDevice &&
+-        VIR_APPEND_ELEMENT(data->devices, data->ndevices, ifname) < 0)
++    if (accept_ra != 2 && virNetDevIPCheckIPv6ForwardingAddIF(data, &ifname) < 0)
+         goto error;
+ 
+  cleanup:
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-util-check-accept_ra-for-all-nexthop-interfaces-of-multipath-routes.patch b/SOURCES/libvirt-util-check-accept_ra-for-all-nexthop-interfaces-of-multipath-routes.patch
new file mode 100644
index 0000000..b9a568a
--- /dev/null
+++ b/SOURCES/libvirt-util-check-accept_ra-for-all-nexthop-interfaces-of-multipath-routes.patch
@@ -0,0 +1,81 @@
+From 1e443270387834e84a335ec500cf069172ab261c Mon Sep 17 00:00:00 2001
+Message-Id: <1e443270387834e84a335ec500cf069172ab261c@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Mon, 14 Jan 2019 11:35:05 -0500
+Subject: [PATCH] util: check accept_ra for all nexthop interfaces of multipath
+ routes
+
+When checking the setting of accept_ra, we have assumed that all
+routes have a single nexthop, so the interface of the route would be
+in the RTA_OIF attribute of the netlink RTM_NEWROUTE message. But
+multipath routes don't have an RTA_OIF; instead, they have an
+RTA_MULTIPATH attribute, which is an array of rtnexthop, with each
+rtnexthop having an interface. This patch adds a loop to look at the
+setting of accept_ra of the interface for every rtnexthop in the
+array.
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit d40b820c5d3b0c9d5222844110881af66cdbb746)
+
+https://bugzilla.redhat.com/1583131
+
+Conflicts: src/util/virnetdevip.c - more context conflicts due to addition of
+        VIR_AUTOPTR and resulting removal of cleanup/error labels upstream.
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virnetdevip.c | 37 +++++++++++++++++++++++++++++++++++++
+ 1 file changed, 37 insertions(+)
+
+diff --git a/src/util/virnetdevip.c b/src/util/virnetdevip.c
+index d56f4f05f3..fff41ec498 100644
+--- a/src/util/virnetdevip.c
++++ b/src/util/virnetdevip.c
+@@ -601,6 +601,43 @@ virNetDevIPCheckIPv6ForwardingCallback(struct nlmsghdr *resp,
+         goto cleanup;
+     }
+ 
++    /* if no RTA_OIF was found, see if this is a multipath route (one
++     * which has an array of nexthops, each with its own interface)
++     */
++
++    rta_attr = (struct rtattr *)nlmsg_find_attr(resp, sizeof(struct rtmsg), RTA_MULTIPATH);
++    if (rta_attr) {
++        /* The data of the attribute is an array of rtnexthop */
++        struct rtnexthop *nh = RTA_DATA(rta_attr);
++        size_t len = RTA_PAYLOAD(rta_attr);
++
++        /* validate the attribute array length */
++        len = MIN(len, ((char *)resp + NLMSG_PAYLOAD(resp, 0) - (char *)rta_attr));
++
++        while (len >= sizeof(*nh) && len >= nh->rtnh_len) {
++            /* check accept_ra for the interface of each nexthop */
++
++            ifname = virNetDevGetName(nh->rtnh_ifindex);
++
++            if (ifname)
++                accept_ra = virNetDevIPGetAcceptRA(ifname);
++
++            VIR_DEBUG("Checking multipath route nexthop device %s (%d), accept_ra: %d",
++                      ifname, nh->rtnh_ifindex, accept_ra);
++
++            if (!ifname ||
++                (accept_ra != 2 && virNetDevIPCheckIPv6ForwardingAddIF(data, &ifname) < 0)) {
++                goto error;
++            }
++
++            VIR_FREE(ifname); /* in case it wasn't added to the array */
++            data->hasRARoutes = true;
++
++            len -= NLMSG_ALIGN(nh->rtnh_len);
++            nh = RTNH_NEXT(nh);
++        }
++    }
++
+  cleanup:
+     VIR_FREE(ifname);
+     return ret;
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-util-fix-memory-leak-in-virFirewallDInterfaceSetZone.patch b/SOURCES/libvirt-util-fix-memory-leak-in-virFirewallDInterfaceSetZone.patch
new file mode 100644
index 0000000..72157e1
--- /dev/null
+++ b/SOURCES/libvirt-util-fix-memory-leak-in-virFirewallDInterfaceSetZone.patch
@@ -0,0 +1,45 @@
+From 5d5b2a9e3641fe1f54913284154ffb15c5a89bbb Mon Sep 17 00:00:00 2001
+Message-Id: <5d5b2a9e3641fe1f54913284154ffb15c5a89bbb@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Wed, 13 Feb 2019 18:18:59 -0500
+Subject: [PATCH] util: fix memory leak in virFirewallDInterfaceSetZone()
+
+commit 3bba4825 added the new function virFirewallDInterfaceSetZone()
+which calledsends virDBUSCallMethod a DBusMessage** for the reply
+message, but doesn't use the reply, and also doesn't free it. Since
+this arg is allowed to be NULL, this patch simply sets it to NULL so
+we don't have to deal with it.
+
+This patch is a part of the resolution to
+https://bugzilla.redhat.com/1650320
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit 2c48e84b7566eab1676400d73a7934f93a7ec831)
+Message-Id: <20190213231859.27018-1-laine@redhat.com>
+---
+ src/util/virfirewalld.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/util/virfirewalld.c b/src/util/virfirewalld.c
+index 8aeb31db80..b49c895138 100644
+--- a/src/util/virfirewalld.c
++++ b/src/util/virfirewalld.c
+@@ -354,13 +354,12 @@ virFirewallDInterfaceSetZone(const char *iface,
+                              const char *zone)
+ {
+     DBusConnection *sysbus = virDBusGetSystemBus();
+-    DBusMessage *reply = NULL;
+ 
+     if (!sysbus)
+         return -1;
+ 
+     return virDBusCallMethod(sysbus,
+-                             &reply,
++                             NULL,
+                              NULL,
+                              VIR_FIREWALL_FIREWALLD_SERVICE,
+                              "/org/fedoraproject/FirewallD1",
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-util-make-forgotten-changes-suggested-during-review-of-commit-d40b820c.patch b/SOURCES/libvirt-util-make-forgotten-changes-suggested-during-review-of-commit-d40b820c.patch
new file mode 100644
index 0000000..dc15478
--- /dev/null
+++ b/SOURCES/libvirt-util-make-forgotten-changes-suggested-during-review-of-commit-d40b820c.patch
@@ -0,0 +1,66 @@
+From dc8506596662fcf2a9aa7942cb1ee081984a23d1 Mon Sep 17 00:00:00 2001
+Message-Id: <dc8506596662fcf2a9aa7942cb1ee081984a23d1@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Mon, 14 Jan 2019 11:35:06 -0500
+Subject: [PATCH] util: make forgotten changes suggested during review of
+ commit d40b820c
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+I had intended to make these changes to commit d40b820c before
+pushing, but forgot about it during the day between the initial review
+and ACK.
+
+Neither change is significant - just returning immediately when
+virNetDevGetName() fails (instead of logging a debug message first)
+and eliminating a comment that adds to confusion rather than
+eliminating it. Still, the changes should be made to be more
+consistent with nearly identical code just a few lines up (added in
+commit 7282f455)
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 85f223a8f2480ad446251639a078bb9420072506)
+
+https://bugzilla.redhat.com/1583131
+
+Conflicts: src/util/virnetdevip.c - more context conflicts
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virnetdevip.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/src/util/virnetdevip.c b/src/util/virnetdevip.c
+index fff41ec498..6400887666 100644
+--- a/src/util/virnetdevip.c
++++ b/src/util/virnetdevip.c
+@@ -619,18 +619,18 @@ virNetDevIPCheckIPv6ForwardingCallback(struct nlmsghdr *resp,
+ 
+             ifname = virNetDevGetName(nh->rtnh_ifindex);
+ 
+-            if (ifname)
+-                accept_ra = virNetDevIPGetAcceptRA(ifname);
++            if (!ifname)
++               goto error;
++
++            accept_ra = virNetDevIPGetAcceptRA(ifname);
+ 
+             VIR_DEBUG("Checking multipath route nexthop device %s (%d), accept_ra: %d",
+                       ifname, nh->rtnh_ifindex, accept_ra);
+ 
+-            if (!ifname ||
+-                (accept_ra != 2 && virNetDevIPCheckIPv6ForwardingAddIF(data, &ifname) < 0)) {
++            if (accept_ra != 2 && virNetDevIPCheckIPv6ForwardingAddIF(data, &ifname) < 0)
+                 goto error;
+-            }
+ 
+-            VIR_FREE(ifname); /* in case it wasn't added to the array */
++            VIR_FREE(ifname);
+             data->hasRARoutes = true;
+ 
+             len -= NLMSG_ALIGN(nh->rtnh_len);
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-util-move-all-firewalld-specific-stuff-into-its-own-files.patch b/SOURCES/libvirt-util-move-all-firewalld-specific-stuff-into-its-own-files.patch
new file mode 100644
index 0000000..5e42aa3
--- /dev/null
+++ b/SOURCES/libvirt-util-move-all-firewalld-specific-stuff-into-its-own-files.patch
@@ -0,0 +1,480 @@
+From da064c59cfc1f35f4638a9e05447c21fea88cb14 Mon Sep 17 00:00:00 2001
+Message-Id: <da064c59cfc1f35f4638a9e05447c21fea88cb14@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Fri, 1 Feb 2019 20:29:28 -0500
+Subject: [PATCH] util: move all firewalld-specific stuff into its own files
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In preparation for adding several other firewalld-specific functions,
+separate the code that's unique to firewalld from the more-generic
+"firewall" file.
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit d8393b56e21708c219acc9bcd24a9c22ead4a3b4)
+
+ Conflicts:
+   src/util/virerror.c - ; added to end of MACRO in context upstream.
+
+https://bugzilla.redhat.com/1650320
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ include/libvirt/virterror.h |   1 +
+ src/libvirt_private.syms    |   5 ++
+ src/util/Makefile.inc.am    |   3 +
+ src/util/virerror.c         |   3 +-
+ src/util/virfirewall.c      |  86 +-------------------
+ src/util/virfirewalld.c     | 151 ++++++++++++++++++++++++++++++++++++
+ src/util/virfirewalld.h     |  33 ++++++++
+ src/util/virfirewalldpriv.h |  30 +++++++
+ src/util/virfirewallpriv.h  |   2 -
+ tests/virfirewalltest.c     |   2 +
+ 10 files changed, 231 insertions(+), 85 deletions(-)
+ create mode 100644 src/util/virfirewalld.c
+ create mode 100644 src/util/virfirewalld.h
+ create mode 100644 src/util/virfirewalldpriv.h
+
+diff --git a/include/libvirt/virterror.h b/include/libvirt/virterror.h
+index 57aadb8d16..30197adc3b 100644
+--- a/include/libvirt/virterror.h
++++ b/include/libvirt/virterror.h
+@@ -133,6 +133,7 @@ typedef enum {
+     VIR_FROM_PERF = 65,         /* Error from perf */
+     VIR_FROM_LIBSSH = 66,       /* Error from libssh connection transport */
+     VIR_FROM_RESCTRL = 67,      /* Error from resource control */
++    VIR_FROM_FIREWALLD = 68,    /* Error from firewalld */
+ 
+ # ifdef VIR_ENUM_SENTINELS
+     VIR_ERR_DOMAIN_LAST
+diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
+index 86846f3b08..57948d8049 100644
+--- a/src/libvirt_private.syms
++++ b/src/libvirt_private.syms
+@@ -1903,6 +1903,11 @@ virFirewallStartRollback;
+ virFirewallStartTransaction;
+ 
+ 
++# util/virfirewalld.h
++virFirewallDApplyRule;
++virFirewallDIsRegistered;
++
++
+ # util/virfirmware.h
+ virFirmwareFreeList;
+ virFirmwareParse;
+diff --git a/src/util/Makefile.inc.am b/src/util/Makefile.inc.am
+index a22265606c..2cef465208 100644
+--- a/src/util/Makefile.inc.am
++++ b/src/util/Makefile.inc.am
+@@ -57,6 +57,9 @@ UTIL_SOURCES = \
+ 	util/virfirewall.c \
+ 	util/virfirewall.h \
+ 	util/virfirewallpriv.h \
++	util/virfirewalld.c \
++	util/virfirewalld.h \
++	util/virfirewalldpriv.h \
+ 	util/virfirmware.c \
+ 	util/virfirmware.h \
+ 	util/virgettext.c \
+diff --git a/src/util/virerror.c b/src/util/virerror.c
+index f198f27957..1d46fcdc82 100644
+--- a/src/util/virerror.c
++++ b/src/util/virerror.c
+@@ -140,7 +140,8 @@ VIR_ENUM_IMPL(virErrorDomain, VIR_ERR_DOMAIN_LAST,
+               "Perf", /* 65 */
+               "Libssh transport layer",
+               "Resource control",
+-    )
++              "FirewallD",
++              );
+ 
+ 
+ /*
+diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c
+index 10c370a2ae..4d084f6cbf 100644
+--- a/src/util/virfirewall.c
++++ b/src/util/virfirewall.c
+@@ -29,12 +29,12 @@
+ 
+ #include "viralloc.h"
+ #include "virfirewallpriv.h"
++#include "virfirewalld.h"
+ #include "virerror.h"
+ #include "virutil.h"
+ #include "virstring.h"
+ #include "vircommand.h"
+ #include "virlog.h"
+-#include "virdbus.h"
+ #include "virfile.h"
+ #include "virthread.h"
+ 
+@@ -51,11 +51,6 @@ VIR_ENUM_IMPL(virFirewallLayerCommand, VIR_FIREWALL_LAYER_LAST,
+               IPTABLES_PATH,
+               IP6TABLES_PATH);
+ 
+-VIR_ENUM_DECL(virFirewallLayerFirewallD)
+-VIR_ENUM_IMPL(virFirewallLayerFirewallD, VIR_FIREWALL_LAYER_LAST,
+-              "eb", "ipv4", "ipv6")
+-
+-
+ struct _virFirewallRule {
+     virFirewallLayer layer;
+ 
+@@ -158,7 +153,7 @@ virFirewallValidateBackend(virFirewallBackend backend)
+     VIR_DEBUG("Validating backend %d", backend);
+     if (backend == VIR_FIREWALL_BACKEND_AUTOMATIC ||
+         backend == VIR_FIREWALL_BACKEND_FIREWALLD) {
+-        int rv = virDBusIsServiceRegistered(VIR_FIREWALL_FIREWALLD_SERVICE);
++        int rv = virFirewallDIsRegistered();
+ 
+         VIR_DEBUG("Firewalld is registered ? %d", rv);
+         if (rv < 0) {
+@@ -726,81 +721,8 @@ virFirewallApplyRuleFirewallD(virFirewallRulePtr rule,
+                               bool ignoreErrors,
+                               char **output)
+ {
+-    const char *ipv = virFirewallLayerFirewallDTypeToString(rule->layer);
+-    DBusConnection *sysbus = virDBusGetSystemBus();
+-    DBusMessage *reply = NULL;
+-    virError error;
+-    int ret = -1;
+-
+-    if (!sysbus)
+-        return -1;
+-
+-    memset(&error, 0, sizeof(error));
+-
+-    if (!ipv) {
+-        virReportError(VIR_ERR_INTERNAL_ERROR,
+-                       _("Unknown firewall layer %d"),
+-                       rule->layer);
+-        goto cleanup;
+-    }
+-
+-    if (virDBusCallMethod(sysbus,
+-                          &reply,
+-                          &error,
+-                          VIR_FIREWALL_FIREWALLD_SERVICE,
+-                          "/org/fedoraproject/FirewallD1",
+-                          "org.fedoraproject.FirewallD1.direct",
+-                          "passthrough",
+-                          "sa&s",
+-                          ipv,
+-                          (int)rule->argsLen,
+-                          rule->args) < 0)
+-        goto cleanup;
+-
+-    if (error.level == VIR_ERR_ERROR) {
+-        /*
+-         * As of firewalld-0.3.9.3-1.fc20.noarch the name and
+-         * message fields in the error look like
+-         *
+-         *    name="org.freedesktop.DBus.Python.dbus.exceptions.DBusException"
+-         * message="COMMAND_FAILED: '/sbin/iptables --table filter --delete
+-         *          INPUT --in-interface virbr0 --protocol udp --destination-port 53
+-         *          --jump ACCEPT' failed: iptables: Bad rule (does a matching rule
+-         *          exist in that chain?)."
+-         *
+-         * We'd like to only ignore DBus errors precisely related to the failure
+-         * of iptables/ebtables commands. A well designed DBus interface would
+-         * return specific named exceptions not the top level generic python dbus
+-         * exception name. With this current scheme our only option is todo a
+-         * sub-string match for 'COMMAND_FAILED' on the message. eg like
+-         *
+-         * if (ignoreErrors &&
+-         *     STREQ(error.name,
+-         *           "org.freedesktop.DBus.Python.dbus.exceptions.DBusException") &&
+-         *     STRPREFIX(error.message, "COMMAND_FAILED"))
+-         *    ...
+-         *
+-         * But this risks our error detecting code being broken if firewalld changes
+-         * ever alter the message string, so we're avoiding doing that.
+-         */
+-        if (ignoreErrors) {
+-            VIR_DEBUG("Ignoring error '%s': '%s'",
+-                      error.str1, error.message);
+-        } else {
+-            virReportErrorObject(&error);
+-            goto cleanup;
+-        }
+-    } else {
+-        if (virDBusMessageRead(reply, "s", output) < 0)
+-            goto cleanup;
+-    }
+-
+-    ret = 0;
+-
+- cleanup:
+-    virResetError(&error);
+-    virDBusMessageUnref(reply);
+-    return ret;
++    /* wrapper necessary because virFirewallRule is a private struct */
++    return virFirewallDApplyRule(rule->layer, rule->args, rule->argsLen, ignoreErrors, output);
+ }
+ 
+ static int
+diff --git a/src/util/virfirewalld.c b/src/util/virfirewalld.c
+new file mode 100644
+index 0000000000..f27ec9c124
+--- /dev/null
++++ b/src/util/virfirewalld.c
+@@ -0,0 +1,151 @@
++/*
++ * virfirewalld.c: support for firewalld (https://firewalld.org)
++ *
++ * Copyright (C) 2019 Red Hat, Inc.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library.  If not, see
++ * <http://www.gnu.org/licenses/>.
++ */
++
++#include <config.h>
++
++#include <stdarg.h>
++
++#include "virfirewall.h"
++#include "virfirewalld.h"
++#define LIBVIRT_VIRFIREWALLDPRIV_H_ALLOW
++#include "virfirewalldpriv.h"
++#include "virerror.h"
++#include "virutil.h"
++#include "virlog.h"
++#include "virdbus.h"
++
++#define VIR_FROM_THIS VIR_FROM_FIREWALLD
++
++VIR_LOG_INIT("util.firewalld");
++
++/* used to convert virFirewallLayer enum values to strings
++ * understood by the firewalld.direct "passthrough" method
++ */
++VIR_ENUM_DECL(virFirewallLayerFirewallD);
++VIR_ENUM_IMPL(virFirewallLayerFirewallD, VIR_FIREWALL_LAYER_LAST,
++              "eb",
++              "ipv4",
++              "ipv6",
++              );
++
++
++/**
++ * virFirewallDIsRegistered:
++ *
++ * Returns 0 if service is registered, -1 on fatal error, or -2 if service is not registered
++ */
++int
++virFirewallDIsRegistered(void)
++{
++    return virDBusIsServiceRegistered(VIR_FIREWALL_FIREWALLD_SERVICE);
++}
++
++
++/**
++ * virFirewallDApplyRule:
++ * @layer:        which layer to apply the rule to
++ * @args:         list of args to send to this layer's passthrough command.
++ * @argsLen:      number of items in @args
++ * @ignoreErrors: true to suppress logging of errors and return success
++ *                false to log errors and return actual status
++ * @output:       output of the direct passthrough command, if it was successful
++ */
++int
++virFirewallDApplyRule(virFirewallLayer layer,
++                      char **args, size_t argsLen,
++                      bool ignoreErrors,
++                      char **output)
++{
++    const char *ipv = virFirewallLayerFirewallDTypeToString(layer);
++    DBusConnection *sysbus = virDBusGetSystemBus();
++    DBusMessage *reply = NULL;
++    virError error;
++    int ret = -1;
++
++    if (!sysbus)
++        return -1;
++
++    memset(&error, 0, sizeof(error));
++
++    if (!ipv) {
++        virReportError(VIR_ERR_INTERNAL_ERROR,
++                       _("Unknown firewall layer %d"),
++                       layer);
++        goto cleanup;
++    }
++
++    if (virDBusCallMethod(sysbus,
++                          &reply,
++                          &error,
++                          VIR_FIREWALL_FIREWALLD_SERVICE,
++                          "/org/fedoraproject/FirewallD1",
++                          "org.fedoraproject.FirewallD1.direct",
++                          "passthrough",
++                          "sa&s",
++                          ipv,
++                          (int)argsLen,
++                          args) < 0)
++        goto cleanup;
++
++    if (error.level == VIR_ERR_ERROR) {
++        /*
++         * As of firewalld-0.3.9.3-1.fc20.noarch the name and
++         * message fields in the error look like
++         *
++         *    name="org.freedesktop.DBus.Python.dbus.exceptions.DBusException"
++         * message="COMMAND_FAILED: '/sbin/iptables --table filter --delete
++         *          INPUT --in-interface virbr0 --protocol udp --destination-port 53
++         *          --jump ACCEPT' failed: iptables: Bad rule (does a matching rule
++         *          exist in that chain?)."
++         *
++         * We'd like to only ignore DBus errors precisely related to the failure
++         * of iptables/ebtables commands. A well designed DBus interface would
++         * return specific named exceptions not the top level generic python dbus
++         * exception name. With this current scheme our only option is todo a
++         * sub-string match for 'COMMAND_FAILED' on the message. eg like
++         *
++         * if (ignoreErrors &&
++         *     STREQ(error.name,
++         *           "org.freedesktop.DBus.Python.dbus.exceptions.DBusException") &&
++         *     STRPREFIX(error.message, "COMMAND_FAILED"))
++         *    ...
++         *
++         * But this risks our error detecting code being broken if firewalld changes
++         * ever alter the message string, so we're avoiding doing that.
++         */
++        if (ignoreErrors) {
++            VIR_DEBUG("Ignoring error '%s': '%s'",
++                      error.str1, error.message);
++        } else {
++            virReportErrorObject(&error);
++            goto cleanup;
++        }
++    } else {
++        if (virDBusMessageRead(reply, "s", output) < 0)
++            goto cleanup;
++    }
++
++    ret = 0;
++
++ cleanup:
++    virResetError(&error);
++    virDBusMessageUnref(reply);
++    return ret;
++}
+diff --git a/src/util/virfirewalld.h b/src/util/virfirewalld.h
+new file mode 100644
+index 0000000000..83fe1149cc
+--- /dev/null
++++ b/src/util/virfirewalld.h
+@@ -0,0 +1,33 @@
++/*
++ * virfirewalld.h: support for firewalld (https://firewalld.org)
++ *
++ * Copyright (C) 2019 Red Hat, Inc.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library.  If not, see
++ * <http://www.gnu.org/licenses/>.
++ */
++
++#ifndef LIBVIRT_VIRFIREWALLD_H
++# define LIBVIRT_VIRFIREWALLD_H
++
++# define VIR_FIREWALL_FIREWALLD_SERVICE "org.fedoraproject.FirewallD1"
++
++int virFirewallDIsRegistered(void);
++
++int virFirewallDApplyRule(virFirewallLayer layer,
++                          char **args, size_t argsLen,
++                          bool ignoreErrors,
++                          char **output);
++
++#endif /* LIBVIRT_VIRFIREWALLD_H */
+diff --git a/src/util/virfirewalldpriv.h b/src/util/virfirewalldpriv.h
+new file mode 100644
+index 0000000000..6c03b467c9
+--- /dev/null
++++ b/src/util/virfirewalldpriv.h
+@@ -0,0 +1,30 @@
++/*
++ * virfirewalldpriv.h: private APIs for firewalld
++ *
++ * Copyright (C) 2019 Red Hat, Inc.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library.  If not, see
++ * <http://www.gnu.org/licenses/>.
++ */
++
++#ifndef LIBVIRT_VIRFIREWALLDPRIV_H_ALLOW
++# error "virfirewalldpriv.h may only be included by virfirewalld.c or test suites"
++#endif /* LIBVIRT_VIRFIREWALLDPRIV_H_ALLOW */
++
++#ifndef LIBVIRT_VIRFIREWALLDPRIV_H
++# define LIBVIRT_VIRFIREWALLDPRIV_H
++
++# define VIR_FIREWALL_FIREWALLD_SERVICE "org.fedoraproject.FirewallD1"
++
++#endif /* LIBVIRT_VIRFIREWALLDPRIV_H */
+diff --git a/src/util/virfirewallpriv.h b/src/util/virfirewallpriv.h
+index 130aaa1b73..bd6089bcc6 100644
+--- a/src/util/virfirewallpriv.h
++++ b/src/util/virfirewallpriv.h
+@@ -30,8 +30,6 @@
+ 
+ # include "virfirewall.h"
+ 
+-# define VIR_FIREWALL_FIREWALLD_SERVICE "org.fedoraproject.FirewallD1"
+-
+ typedef enum {
+     VIR_FIREWALL_BACKEND_AUTOMATIC,
+     VIR_FIREWALL_BACKEND_DIRECT,
+diff --git a/tests/virfirewalltest.c b/tests/virfirewalltest.c
+index e6d68745ae..397abfcc60 100644
+--- a/tests/virfirewalltest.c
++++ b/tests/virfirewalltest.c
+@@ -30,6 +30,8 @@
+ # include "virbuffer.h"
+ # include "vircommandpriv.h"
+ # include "virfirewallpriv.h"
++# define LIBVIRT_VIRFIREWALLDPRIV_H_ALLOW
++# include "virfirewalldpriv.h"
+ # include "virmock.h"
+ # include "virdbuspriv.h"
+ 
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-util-new-virFirewallD-APIs-docs.patch b/SOURCES/libvirt-util-new-virFirewallD-APIs-docs.patch
new file mode 100644
index 0000000..ae0ea8a
--- /dev/null
+++ b/SOURCES/libvirt-util-new-virFirewallD-APIs-docs.patch
@@ -0,0 +1,343 @@
+From 477f1de37ff7c911048d8d5e7f7de32f12d30b5d Mon Sep 17 00:00:00 2001
+Message-Id: <477f1de37ff7c911048d8d5e7f7de32f12d30b5d@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Fri, 1 Feb 2019 20:29:29 -0500
+Subject: [PATCH] util: new virFirewallD APIs + docs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+virFirewallDGetBackend() reports whether firewalld is currently using
+an iptables or an nftables backend.
+
+virFirewallDGetVersion() learns the version of the firewalld running
+on this system and returns it as 1000000*major + 1000*minor + micro.
+
+virFirewallDGetZones() gets a list of all currently active firewalld
+zones.
+
+virFirewallDInterfaceSetZone() sets the firewalld zone of the given
+interface.
+
+virFirewallDZoneExists() can be used to learn whether or not a
+particular zone is present and active in firewalld.
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 3bba4825c291e51a8cd4d497d6e919ac2ee96ff0)
+
+Conflicts: src/util/virfirewalld.c - had to remove VIR_AUTO_PTR(), which doesn't
+   exist in libvirt 4.5.0, and replace with appropriately placed VIR_FREE()
+
+https://bugzilla.redhat.com/1650320
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/libvirt_private.syms |   5 +
+ src/util/virfirewalld.c  | 223 +++++++++++++++++++++++++++++++++++++++
+ src/util/virfirewalld.h  |  15 ++-
+ 3 files changed, 242 insertions(+), 1 deletion(-)
+
+diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
+index 57948d8049..624151056a 100644
+--- a/src/libvirt_private.syms
++++ b/src/libvirt_private.syms
+@@ -1905,7 +1905,12 @@ virFirewallStartTransaction;
+ 
+ # util/virfirewalld.h
+ virFirewallDApplyRule;
++virFirewallDGetBackend;
++virFirewallDGetVersion;
++virFirewallDGetZones;
++virFirewallDInterfaceSetZone;
+ virFirewallDIsRegistered;
++virFirewallDZoneExists;
+ 
+ 
+ # util/virfirmware.h
+diff --git a/src/util/virfirewalld.c b/src/util/virfirewalld.c
+index f27ec9c124..8dd6ac2b8a 100644
+--- a/src/util/virfirewalld.c
++++ b/src/util/virfirewalld.c
+@@ -22,6 +22,7 @@
+ 
+ #include <stdarg.h>
+ 
++#include "viralloc.h"
+ #include "virfirewall.h"
+ #include "virfirewalld.h"
+ #define LIBVIRT_VIRFIREWALLDPRIV_H_ALLOW
+@@ -46,6 +47,14 @@ VIR_ENUM_IMPL(virFirewallLayerFirewallD, VIR_FIREWALL_LAYER_LAST,
+               );
+ 
+ 
++VIR_ENUM_DECL(virFirewallDBackend);
++VIR_ENUM_IMPL(virFirewallDBackend, VIR_FIREWALLD_BACKEND_LAST,
++              "",
++              "iptables",
++              "nftables",
++              );
++
++
+ /**
+  * virFirewallDIsRegistered:
+  *
+@@ -57,6 +66,197 @@ virFirewallDIsRegistered(void)
+     return virDBusIsServiceRegistered(VIR_FIREWALL_FIREWALLD_SERVICE);
+ }
+ 
++/**
++ * virFirewallDGetVersion:
++ * @version: pointer to location to save version in the form of:
++ *           1000000 * major + 1000 * minor + micro
++ *
++ * queries the firewalld version property from dbus, and converts it
++ * from a string into a number.
++ *
++ * Returns 0 if version was successfully retrieved, or -1 on error
++ */
++int
++virFirewallDGetVersion(unsigned long *version)
++{
++    int ret = -1;
++    DBusConnection *sysbus = virDBusGetSystemBus();
++    DBusMessage *reply = NULL;
++    char * versionStr = NULL;
++
++    if (!sysbus)
++        return -1;
++
++    if (virDBusCallMethod(sysbus,
++                          &reply,
++                          NULL,
++                          VIR_FIREWALL_FIREWALLD_SERVICE,
++                          "/org/fedoraproject/FirewallD1",
++                          "org.freedesktop.DBus.Properties",
++                          "Get",
++                          "ss",
++                          "org.fedoraproject.FirewallD1",
++                          "version") < 0)
++        goto cleanup;
++
++    if (virDBusMessageRead(reply, "v", "s", &versionStr) < 0)
++        goto cleanup;
++
++    if (virParseVersionString(versionStr, version, false) < 0) {
++        virReportError(VIR_ERR_INTERNAL_ERROR,
++                       _("Failed to parse firewalld version '%s'"),
++                       versionStr);
++        goto cleanup;
++    }
++
++    VIR_DEBUG("FirewallD version: %s - %lu", versionStr, *version);
++
++    ret = 0;
++ cleanup:
++    VIR_FREE(versionStr);
++    virDBusMessageUnref(reply);
++    return ret;
++}
++
++/**
++ * virFirewallDGetBackend:
++ *
++ * Returns virVirewallDBackendType value representing which packet
++ * filtering backend is currently in use by firewalld, or -1 on error.
++ */
++int
++virFirewallDGetBackend(void)
++{
++    DBusConnection *sysbus = virDBusGetSystemBus();
++    DBusMessage *reply = NULL;
++    virError error;
++    char * backendStr = NULL;
++    int backend = -1;
++
++    if (!sysbus)
++        return -1;
++
++    memset(&error, 0, sizeof(error));
++
++    if (virDBusCallMethod(sysbus,
++                          &reply,
++                          &error,
++                          VIR_FIREWALL_FIREWALLD_SERVICE,
++                          "/org/fedoraproject/FirewallD1/config",
++                          "org.freedesktop.DBus.Properties",
++                          "Get",
++                          "ss",
++                          "org.fedoraproject.FirewallD1.config",
++                          "FirewallBackend") < 0)
++        goto cleanup;
++
++    if (error.level == VIR_ERR_ERROR) {
++        /* we don't want to log any error in the case that
++         * FirewallBackend isn't implemented in this firewalld, since
++         * that just means that it is an old version, and only has an
++         * iptables backend.
++         */
++        VIR_DEBUG("Failed to get FirewallBackend setting, assuming 'iptables'");
++        backend = VIR_FIREWALLD_BACKEND_IPTABLES;
++        goto cleanup;
++    }
++
++    if (virDBusMessageRead(reply, "v", "s", &backendStr) < 0)
++        goto cleanup;
++
++    VIR_DEBUG("FirewallD backend: %s", backendStr);
++
++    if ((backend = virFirewallDBackendTypeFromString(backendStr)) < 0) {
++        virReportError(VIR_ERR_INTERNAL_ERROR,
++                       _("Unrecognized firewalld backend type: %s"),
++                       backendStr);
++        goto cleanup;
++    }
++
++ cleanup:
++    VIR_FREE(backendStr);
++    virResetError(&error);
++    virDBusMessageUnref(reply);
++    return backend;
++}
++
++
++/**
++ * virFirewallDGetZones:
++ * @zones: array of char *, each entry is a null-terminated zone name
++ * @nzones: number of entries in @zones
++ *
++ * Get the number of currently active firewalld zones, and their names
++ * in an array of null-terminated strings. The memory pointed to by
++ * @zones will belong to the caller, and must be freed.
++ *
++ * Returns 0 on success, -1 (and failure logged) on error
++ */
++int
++virFirewallDGetZones(char ***zones, size_t *nzones)
++{
++    DBusConnection *sysbus = virDBusGetSystemBus();
++    DBusMessage *reply = NULL;
++    int ret = -1;
++
++    *nzones = 0;
++    *zones = NULL;
++
++    if (!sysbus)
++        return -1;
++
++    if (virDBusCallMethod(sysbus,
++                          &reply,
++                          NULL,
++                          VIR_FIREWALL_FIREWALLD_SERVICE,
++                          "/org/fedoraproject/FirewallD1",
++                          "org.fedoraproject.FirewallD1.zone",
++                          "getZones",
++                          NULL) < 0)
++        goto cleanup;
++
++    if (virDBusMessageRead(reply, "a&s", nzones, zones) < 0)
++        goto cleanup;
++
++    ret = 0;
++ cleanup:
++    virDBusMessageUnref(reply);
++    return ret;
++}
++
++
++/**
++ * virFirewallDZoneExists:
++ * @match: name of zone to look for
++ *
++ * Returns true if the requested zone exists, or false if it doesn't exist
++ */
++bool
++virFirewallDZoneExists(const char *match)
++{
++    size_t nzones = 0, i;
++    char **zones = NULL;
++    bool result = false;
++
++    return true;
++
++    if (virFirewallDGetZones(&zones, &nzones) < 0)
++        goto cleanup;
++
++    for (i = 0; i < nzones; i++) {
++        if (STREQ_NULLABLE(zones[i], match))
++            result = true;
++    }
++
++ cleanup:
++    VIR_DEBUG("Requested zone '%s' %s exist",
++              match, result ? "does" : "doesn't");
++    for (i = 0; i < nzones; i++)
++       VIR_FREE(zones[i]);
++    VIR_FREE(zones);
++    return result;
++}
++
+ 
+ /**
+  * virFirewallDApplyRule:
+@@ -149,3 +349,26 @@ virFirewallDApplyRule(virFirewallLayer layer,
+     virDBusMessageUnref(reply);
+     return ret;
+ }
++
++
++int
++virFirewallDInterfaceSetZone(const char *iface,
++                             const char *zone)
++{
++    DBusConnection *sysbus = virDBusGetSystemBus();
++    DBusMessage *reply = NULL;
++
++    if (!sysbus)
++        return -1;
++
++    return virDBusCallMethod(sysbus,
++                             &reply,
++                             NULL,
++                             VIR_FIREWALL_FIREWALLD_SERVICE,
++                             "/org/fedoraproject/FirewallD1",
++                             "org.fedoraproject.FirewallD1.zone",
++                             "changeZoneOfInterface",
++                             "ss",
++                             zone,
++                             iface);
++}
+diff --git a/src/util/virfirewalld.h b/src/util/virfirewalld.h
+index 83fe1149cc..f05f5f2f08 100644
+--- a/src/util/virfirewalld.h
++++ b/src/util/virfirewalld.h
+@@ -23,11 +23,24 @@
+ 
+ # define VIR_FIREWALL_FIREWALLD_SERVICE "org.fedoraproject.FirewallD1"
+ 
+-int virFirewallDIsRegistered(void);
++typedef enum {
++    VIR_FIREWALLD_BACKEND_NONE,
++    VIR_FIREWALLD_BACKEND_IPTABLES,
++    VIR_FIREWALLD_BACKEND_NFTABLES,
++    VIR_FIREWALLD_BACKEND_LAST,
++} virFirewallDBackendType;
+ 
++int virFirewallDGetVersion(unsigned long *version);
++int virFirewallDGetBackend(void);
++int virFirewallDIsRegistered(void);
++int virFirewallDGetZones(char ***zones, size_t *nzones);
++bool virFirewallDZoneExists(const char *match);
+ int virFirewallDApplyRule(virFirewallLayer layer,
+                           char **args, size_t argsLen,
+                           bool ignoreErrors,
+                           char **output);
+ 
++int virFirewallDInterfaceSetZone(const char *iface,
++                                 const char *zone);
++
+ #endif /* LIBVIRT_VIRFIREWALLD_H */
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-util-remove-const-specifier-from-nlmsghdr-arg-to-virNetlinkDumpCallback.patch b/SOURCES/libvirt-util-remove-const-specifier-from-nlmsghdr-arg-to-virNetlinkDumpCallback.patch
new file mode 100644
index 0000000..38cd3bf
--- /dev/null
+++ b/SOURCES/libvirt-util-remove-const-specifier-from-nlmsghdr-arg-to-virNetlinkDumpCallback.patch
@@ -0,0 +1,51 @@
+From b990a79a9f4dc52452719bc99aa9f6caedafbf72 Mon Sep 17 00:00:00 2001
+Message-Id: <b990a79a9f4dc52452719bc99aa9f6caedafbf72@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Mon, 14 Jan 2019 11:35:02 -0500
+Subject: [PATCH] util: remove const specifier from nlmsghdr arg to
+ virNetlinkDumpCallback()
+
+This is problematic if a callback function wants to send the nlmsghdr
+to a library function that has no "const" in its prototype
+(e.g. nlmsg_find_attr())
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 0ea259b6bf3c89bb3b144eba38bc0bd32e516107)
+
+https: //bugzilla.redhat.com/1583131
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virnetdevip.c | 2 +-
+ src/util/virnetlink.h  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/util/virnetdevip.c b/src/util/virnetdevip.c
+index bf98ed8a59..1bfbd20034 100644
+--- a/src/util/virnetdevip.c
++++ b/src/util/virnetdevip.c
+@@ -540,7 +540,7 @@ struct virNetDevIPCheckIPv6ForwardingData {
+ };
+ 
+ static int
+-virNetDevIPCheckIPv6ForwardingCallback(const struct nlmsghdr *resp,
++virNetDevIPCheckIPv6ForwardingCallback(struct nlmsghdr *resp,
+                                        void *opaque)
+ {
+     struct rtmsg *rtmsg = NLMSG_DATA(resp);
+diff --git a/src/util/virnetlink.h b/src/util/virnetlink.h
+index 2a9de0a575..7ff88a5faf 100644
+--- a/src/util/virnetlink.h
++++ b/src/util/virnetlink.h
+@@ -52,7 +52,7 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
+                       uint32_t src_pid, uint32_t dst_pid,
+                       unsigned int protocol, unsigned int groups);
+ 
+-typedef int (*virNetlinkDumpCallback)(const struct nlmsghdr *resp,
++typedef int (*virNetlinkDumpCallback)(struct nlmsghdr *resp,
+                                       void *data);
+ 
+ int virNetlinkDumpCommand(struct nl_msg *nl_msg,
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-util-remove-test-code-accidentally-committed-to-virFirewallDZoneExists.patch b/SOURCES/libvirt-util-remove-test-code-accidentally-committed-to-virFirewallDZoneExists.patch
new file mode 100644
index 0000000..a66d259
--- /dev/null
+++ b/SOURCES/libvirt-util-remove-test-code-accidentally-committed-to-virFirewallDZoneExists.patch
@@ -0,0 +1,46 @@
+From b2998798bddb9ffd98917cabd9d31578bf6724f3 Mon Sep 17 00:00:00 2001
+Message-Id: <b2998798bddb9ffd98917cabd9d31578bf6724f3@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Sat, 2 Feb 2019 23:32:54 -0500
+Subject: [PATCH] util: remove test code accidentally committed to
+ virFirewallDZoneExists
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Just before pushing the series containing commit 3bba4825 I had added
+a "return true" to the top of virFirewallDZoneExists() to measure the
+impact of calling that function once per network during startup. I
+found that the effect was minimal, but forgot to remove the "return
+true" before pushing. This unfortunately causes a failure to start
+networks on systems that have a firewalld version that doesn't support
+our libvirt zone file (i.e. pretty much everyone).
+
+This patch removes the unintended line.
+
+Signed-off-by: Laine Stump <laine@laine.org>
+(cherry picked from commit 7c9dcfed5ae6d5874ea0e67e47a6871707b8446a)
+
+https://bugzilla.redhat.com/1650320
+
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/util/virfirewalld.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/util/virfirewalld.c b/src/util/virfirewalld.c
+index 8dd6ac2b8a..8aeb31db80 100644
+--- a/src/util/virfirewalld.c
++++ b/src/util/virfirewalld.c
+@@ -238,8 +238,6 @@ virFirewallDZoneExists(const char *match)
+     char **zones = NULL;
+     bool result = false;
+ 
+-    return true;
+-
+     if (virFirewallDGetZones(&zones, &nzones) < 0)
+         goto cleanup;
+ 
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-util-use-nlmsg_find_attr-instead-of-an-open-coded-loop.patch b/SOURCES/libvirt-util-use-nlmsg_find_attr-instead-of-an-open-coded-loop.patch
new file mode 100644
index 0000000..6b3e0cb
--- /dev/null
+++ b/SOURCES/libvirt-util-use-nlmsg_find_attr-instead-of-an-open-coded-loop.patch
@@ -0,0 +1,106 @@
+From 46d50fe9ca30e8377995fea2b7d59239b46a0cfa Mon Sep 17 00:00:00 2001
+Message-Id: <46d50fe9ca30e8377995fea2b7d59239b46a0cfa@dist-git>
+From: Laine Stump <laine@laine.org>
+Date: Mon, 14 Jan 2019 11:35:04 -0500
+Subject: [PATCH] util: use nlmsg_find_attr() instead of an open-coded loop
+
+This is about the same number of code lines, but is simpler, and more
+consistent with what will be added to check another attribute in a
+coming patch.
+
+As a side effect, it
+
+Resolves: https://bugzilla.redhat.com/1583131
+
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 7282f455aaaa8bf2f73236aa9ec6b65b33c0fcdb)
+
+Conflicts: src/util/virnetdevip.c -  more blowback from the addition of VIR_AUTOPTR
+                             upstream.
+Signed-off-by: Laine Stump <laine@laine.org>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virnetdevip.c | 52 ++++++++++++++++++------------------------
+ 1 file changed, 22 insertions(+), 30 deletions(-)
+
+diff --git a/src/util/virnetdevip.c b/src/util/virnetdevip.c
+index 937ebcdbdb..d56f4f05f3 100644
+--- a/src/util/virnetdevip.c
++++ b/src/util/virnetdevip.c
+@@ -564,50 +564,42 @@ virNetDevIPCheckIPv6ForwardingCallback(struct nlmsghdr *resp,
+ {
+     struct rtmsg *rtmsg = NLMSG_DATA(resp);
+     int accept_ra = -1;
+-    struct rtattr *rta;
++    struct rtattr *rta_attr;
+     char *ifname = NULL;
++    int ifindex = -1;
+     struct virNetDevIPCheckIPv6ForwardingData *data = opaque;
+     int ret = 0;
+-    int len = RTM_PAYLOAD(resp);
+-    int oif = -1;
+ 
+     /* Ignore messages other than route ones */
+     if (resp->nlmsg_type != RTM_NEWROUTE)
+         return ret;
+ 
+-    /* Extract a device ID attribute */
+-    VIR_WARNINGS_NO_CAST_ALIGN
+-    for (rta = RTM_RTA(rtmsg); RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
+-        VIR_WARNINGS_RESET
+-        if (rta->rta_type == RTA_OIF) {
+-            oif = *(int *)RTA_DATA(rta);
+-
+-            /* Should never happen: netlink message would be broken */
+-            if (ifname) {
+-                char *ifname2 = virNetDevGetName(oif);
+-                VIR_WARN("Single route has unexpected 2nd interface "
+-                         "- '%s' and '%s'", ifname, ifname2);
+-                VIR_FREE(ifname2);
+-                break;
+-            }
+-
+-            if (!(ifname = virNetDevGetName(oif)))
+-                goto error;
+-        }
+-    }
+-
+     /* No need to do anything else for non RA routes */
+     if (rtmsg->rtm_protocol != RTPROT_RA)
+         goto cleanup;
+ 
+-    data->hasRARoutes = true;
++    rta_attr = (struct rtattr *)nlmsg_find_attr(resp, sizeof(struct rtmsg), RTA_OIF);
++    if (rta_attr) {
++        /* This is a single path route, with interface used to reach
++         * nexthop in the RTA_OIF attribute.
++         */
++        ifindex = *(int *)RTA_DATA(rta_attr);
++        ifname = virNetDevGetName(ifindex);
+ 
+-    /* Check the accept_ra value for the interface */
+-    accept_ra = virNetDevIPGetAcceptRA(ifname);
+-    VIR_DEBUG("Checking route for device %s, accept_ra: %d", ifname, accept_ra);
++        if (!ifname)
++            goto error;
+ 
+-    if (accept_ra != 2 && virNetDevIPCheckIPv6ForwardingAddIF(data, &ifname) < 0)
+-        goto error;
++        accept_ra = virNetDevIPGetAcceptRA(ifname);
++
++        VIR_DEBUG("Checking route for device %s (%d), accept_ra: %d",
++                  ifname, ifindex, accept_ra);
++
++        if (accept_ra != 2 && virNetDevIPCheckIPv6ForwardingAddIF(data, &ifname) < 0)
++            goto error;
++
++        data->hasRARoutes = true;
++        goto cleanup;
++    }
+ 
+  cleanup:
+     VIR_FREE(ifname);
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-utils-Remove-arbitrary-limit-on-socket_id-core_id.patch b/SOURCES/libvirt-utils-Remove-arbitrary-limit-on-socket_id-core_id.patch
new file mode 100644
index 0000000..ed455de
--- /dev/null
+++ b/SOURCES/libvirt-utils-Remove-arbitrary-limit-on-socket_id-core_id.patch
@@ -0,0 +1,93 @@
+From fb4e8466ec0adc6e0aee55ab34e60e88d365d5de Mon Sep 17 00:00:00 2001
+Message-Id: <fb4e8466ec0adc6e0aee55ab34e60e88d365d5de@dist-git>
+From: Andrea Bolognani <abologna@redhat.com>
+Date: Wed, 15 Aug 2018 14:04:43 +0200
+Subject: [PATCH] utils: Remove arbitrary limit on socket_id/core_id
+
+While in most cases the values are going to be much
+smaller than our arbitrary 4096 limit, there is really
+no guarantee that would be the case: in fact, a few
+aarch64 servers have been spotted in the wild with
+core_id as high as 6216.
+
+Take advantage of virBitmap's ability to automatically
+alter its size at runtime to accomodate such values.
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit ba35ac2ebbc7f94abc50ffbf1d681458e2406444)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1608479
+
+Signed-off-by: Andrea Bolognani <abologna@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virhostcpu.c | 23 ++++-------------------
+ 1 file changed, 4 insertions(+), 19 deletions(-)
+
+diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
+index b644398e00..1e31be5900 100644
+--- a/src/util/virhostcpu.c
++++ b/src/util/virhostcpu.c
+@@ -294,9 +294,6 @@ virHostCPUParseNode(const char *node,
+                     int *threads,
+                     int *offline)
+ {
+-    /* Biggest value we can expect to be used as either socket id
+-     * or core id. Bitmaps will need to be sized accordingly */
+-    const int ID_MAX = 4095;
+     int ret = -1;
+     int processors = 0;
+     DIR *cpudir = NULL;
+@@ -325,7 +322,7 @@ virHostCPUParseNode(const char *node,
+         goto cleanup;
+ 
+     /* enumerate sockets in the node */
+-    if (!(sockets_map = virBitmapNew(ID_MAX + 1)))
++    if (!(sockets_map = virBitmapNewEmpty()))
+         goto cleanup;
+ 
+     while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) {
+@@ -344,14 +341,8 @@ virHostCPUParseNode(const char *node,
+ 
+         if (virHostCPUGetSocket(cpu, &sock) < 0)
+             goto cleanup;
+-        if (sock > ID_MAX) {
+-            virReportError(VIR_ERR_INTERNAL_ERROR,
+-                           _("Socket %d can't be handled (max socket is %d)"),
+-                           sock, ID_MAX);
+-            goto cleanup;
+-        }
+ 
+-        if (virBitmapSetBit(sockets_map, sock) < 0)
++        if (virBitmapSetBitExpand(sockets_map, sock) < 0)
+             goto cleanup;
+ 
+         if (sock > sock_max)
+@@ -368,7 +359,7 @@ virHostCPUParseNode(const char *node,
+         goto cleanup;
+ 
+     for (i = 0; i < sock_max; i++)
+-        if (!(cores_maps[i] = virBitmapNew(ID_MAX + 1)))
++        if (!(cores_maps[i] = virBitmapNewEmpty()))
+             goto cleanup;
+ 
+     /* Iterate over all CPUs in the node, in ascending order */
+@@ -412,14 +403,8 @@ virHostCPUParseNode(const char *node,
+             if (virHostCPUGetCore(cpu, &core) < 0)
+                 goto cleanup;
+         }
+-        if (core > ID_MAX) {
+-            virReportError(VIR_ERR_INTERNAL_ERROR,
+-                           _("Core %d can't be handled (max core is %d)"),
+-                           core, ID_MAX);
+-            goto cleanup;
+-        }
+ 
+-        if (virBitmapSetBit(cores_maps[sock], core) < 0)
++        if (virBitmapSetBitExpand(cores_maps[sock], core) < 0)
+             goto cleanup;
+ 
+         if (!(siblings = virHostCPUCountThreadSiblings(cpu)))
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-virDomainConfNWFilterInstantiate-initialize-xml-to-avoid-random-crash.patch b/SOURCES/libvirt-virDomainConfNWFilterInstantiate-initialize-xml-to-avoid-random-crash.patch
new file mode 100644
index 0000000..8599acc
--- /dev/null
+++ b/SOURCES/libvirt-virDomainConfNWFilterInstantiate-initialize-xml-to-avoid-random-crash.patch
@@ -0,0 +1,52 @@
+From 0f3ca7bcaaec337a672b3a0660c0ceda5f55d807 Mon Sep 17 00:00:00 2001
+Message-Id: <0f3ca7bcaaec337a672b3a0660c0ceda5f55d807@dist-git>
+From: Luyao Huang <lhuang@redhat.com>
+Date: Wed, 11 Jul 2018 17:29:48 +0200
+Subject: [PATCH] virDomainConfNWFilterInstantiate: initialize @xml to avoid
+ random crash
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1599545
+
+If the code jump to the cleanup before assigning value to @xml
+libvirtd may crash when it tries to free an uninitialized pointer.
+
+backtrace:
+
+0  0x00007ffff428d59c in free () from /lib64/libc.so.6
+1  0x00007ffff721314a in virFree (ptrptr=ptrptr@entry=0x7fffc67f1b00) at util/viralloc.c:582
+2  0x00007ffff7345ac4 in virDomainConfNWFilterInstantiate (vmname=<optimized out>,
+   vmuuid=vmuuid@entry=0x7fffc0181ca8 "߉\237\\۔H\262\206z\340\302f\265\233z", net=<optimized out>,
+   ignoreExists=ignoreExists@entry=true) at conf/domain_nwfilter.c:122
+3  0x00007fffca5a77f6 in qemuProcessFiltersInstantiate (ignoreExists=true, def=0x7fffc0181ca0) at qemu/qemu_process.c:3028
+4  qemuProcessReconnect (opaque=<optimized out>) at qemu/qemu_process.c:7653
+5  0x00007ffff72c4895 in virThreadHelper (data=<optimized out>) at util/virthread.c:206
+6  0x00007ffff45dcdd5 in start_thread () from /lib64/libpthread.so.0
+7  0x00007ffff4305ead in clone () from /lib64/libc.so.6
+
+Signed-off-by: Luyao Huang <lhuang@redhat.com>
+(cherry picked from commit d7557f5f6f51264c1b5623e97f7b4d5259d4d3b6)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_nwfilter.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/conf/domain_nwfilter.c b/src/conf/domain_nwfilter.c
+index 948b32481e..24b5f42ddd 100644
+--- a/src/conf/domain_nwfilter.c
++++ b/src/conf/domain_nwfilter.c
+@@ -90,7 +90,7 @@ virDomainConfNWFilterInstantiate(const char *vmname,
+     virConnectPtr conn = virGetConnectNWFilter();
+     virNWFilterBindingDefPtr def = NULL;
+     virNWFilterBindingPtr binding = NULL;
+-    char *xml;
++    char *xml = NULL;
+     int ret = -1;
+ 
+     VIR_DEBUG("vmname=%s portdev=%s filter=%s ignoreExists=%d",
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-virDomainDefCompatibleDevice-Relax-alias-change-check.patch b/SOURCES/libvirt-virDomainDefCompatibleDevice-Relax-alias-change-check.patch
new file mode 100644
index 0000000..7f974c0
--- /dev/null
+++ b/SOURCES/libvirt-virDomainDefCompatibleDevice-Relax-alias-change-check.patch
@@ -0,0 +1,55 @@
+From bb036e3bd2e9c1febb2c1331c3221e1c8a5d7663 Mon Sep 17 00:00:00 2001
+Message-Id: <bb036e3bd2e9c1febb2c1331c3221e1c8a5d7663@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Tue, 4 Sep 2018 10:38:48 +0200
+Subject: [PATCH] virDomainDefCompatibleDevice: Relax alias change check
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+RHEL-7.6: https://bugzilla.redhat.com/show_bug.cgi?id=1621910
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1603133
+
+When introducing this check back in 4ad54a417a1 my mindset was
+that if an element is missing in update XML then user is
+requesting for removal of the corresponding setting. For
+instance, if <bandwidth/> is not present in update XML any QoS
+previously set on <interface/> is cleared out. Well this
+assumption is correct but only to some extent.
+
+Turns out, we have some users who when updating path to ISO
+image construct very minimalistic disk XML and pass it to device
+update API. Such XML is lacking a lot of information, and alias
+is one of them. This triggers error in
+virDomainDefCompatibleDevice() because we think that user is
+requesting to remove the alias. Well, they are not.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit b48d9e939bcf32a8d6e571313637e2eefe52e117)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 16e52d149d..35f944d92a 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -28397,9 +28397,9 @@ virDomainDefCompatibleDevice(virDomainDefPtr def,
+ 
+     if (action == VIR_DOMAIN_DEVICE_ACTION_UPDATE &&
+         live &&
+-        ((!!data.newInfo != !!data.oldInfo) ||
+-         (data.newInfo && data.oldInfo &&
+-          STRNEQ_NULLABLE(data.newInfo->alias, data.oldInfo->alias)))) {
++        (data.newInfo && data.oldInfo &&
++         data.newInfo->alias && data.oldInfo->alias &&
++         STRNEQ(data.newInfo->alias, data.oldInfo->alias))) {
+         virReportError(VIR_ERR_OPERATION_DENIED, "%s",
+                        _("changing device alias is not allowed"));
+         return -1;
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-virDomainDetachDeviceFlags-Clarify-update-semantics.patch b/SOURCES/libvirt-virDomainDetachDeviceFlags-Clarify-update-semantics.patch
new file mode 100644
index 0000000..bcedf36
--- /dev/null
+++ b/SOURCES/libvirt-virDomainDetachDeviceFlags-Clarify-update-semantics.patch
@@ -0,0 +1,50 @@
+From 37b470d6e99ba9468054ae20524ed00014e6e0bb Mon Sep 17 00:00:00 2001
+Message-Id: <37b470d6e99ba9468054ae20524ed00014e6e0bb@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Tue, 4 Sep 2018 10:38:49 +0200
+Subject: [PATCH] virDomainDetachDeviceFlags: Clarify update semantics
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+RHEL-7.6: https://bugzilla.redhat.com/show_bug.cgi?id=1621910
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1603133
+
+When users want to update a path to a CDROM they tend to
+construct a very minimal XML and feed the API with it. This is
+not a good practice as it breaks the assumptions the API is built
+on. Most notably, leaving an element out should be treated as a
+request for removal of the corresponding setting. Just like
+leaving out <bandwidth/> clears out any QoS previously set.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 2864b4cd1ccda9c12f0c0ceb340836c42a2a0e52)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/libvirt-domain.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
+index ab7266dc19..ad0ded9ee3 100644
+--- a/src/libvirt-domain.c
++++ b/src/libvirt-domain.c
+@@ -8315,6 +8315,14 @@ virDomainDetachDeviceFlags(virDomainPtr domain,
+  * media, altering the graphics configuration such as password,
+  * reconfiguring the NIC device backend connectivity, etc.
+  *
++ * The supplied XML description of the device should contain all
++ * the information that is found in the corresponding domain XML.
++ * Leaving out any piece of information may be treated as a
++ * request for its removal, which may be denied. For instance,
++ * when users want to change CDROM media only for live XML, they
++ * must provide live disk XML as found in the corresponding live
++ * domain XML with only the disk path changed.
++ *
+  * Returns 0 in case of success, -1 in case of failure.
+  */
+ int
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-virDomainNetDefCheckABIStability-Check-for-MTU-change-too.patch b/SOURCES/libvirt-virDomainNetDefCheckABIStability-Check-for-MTU-change-too.patch
new file mode 100644
index 0000000..7f337c1
--- /dev/null
+++ b/SOURCES/libvirt-virDomainNetDefCheckABIStability-Check-for-MTU-change-too.patch
@@ -0,0 +1,47 @@
+From b84c055e38c1075af7ff51c9809977a48118ded2 Mon Sep 17 00:00:00 2001
+Message-Id: <b84c055e38c1075af7ff51c9809977a48118ded2@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Tue, 4 Sep 2018 10:41:02 +0200
+Subject: [PATCH] virDomainNetDefCheckABIStability: Check for MTU change too
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+RHEL-7.6: https://bugzilla.redhat.com/show_bug.cgi?id=1623157
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1623158
+
+Changing MTU on a running guest is not possible and trying to do
+so made us face many problems. That's why we forbid it in
+5f44d7e357f61f7. However, there is still one possible path where
+users can sneak in change: migration XML.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 4ea3693104c03ac40a6595f5b9bcda58fa18afe7)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 35f944d92a..a881b43b51 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -21628,6 +21628,13 @@ virDomainNetDefCheckABIStability(virDomainNetDefPtr src,
+         return false;
+     }
+ 
++    if (src->mtu != dst->mtu) {
++        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++                       _("Target network card MTU %d does not match source %d"),
++                       dst->mtu, src->mtu);
++        return false;
++    }
++
+     if (src->virtio && dst->virtio &&
+         !virDomainVirtioOptionsCheckABIStability(src->virtio, dst->virtio))
+         return false;
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-virFileIsSharedFSType-Check-for-fuse.glusterfs-too.patch b/SOURCES/libvirt-virFileIsSharedFSType-Check-for-fuse.glusterfs-too.patch
new file mode 100644
index 0000000..4592e1b
--- /dev/null
+++ b/SOURCES/libvirt-virFileIsSharedFSType-Check-for-fuse.glusterfs-too.patch
@@ -0,0 +1,128 @@
+From 40f76170e9b12f1d2f00cf05761fb56aec8b9494 Mon Sep 17 00:00:00 2001
+Message-Id: <40f76170e9b12f1d2f00cf05761fb56aec8b9494@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 3 Oct 2018 14:16:49 +0200
+Subject: [PATCH] virFileIsSharedFSType: Check for fuse.glusterfs too
+
+RHEL-7.7: https://bugzilla.redhat.com/show_bug.cgi?id=1632711
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1634782
+
+GlusterFS is typically safe when it comes to migration. It's a
+network FS after all. However, it can be mounted via FUSE driver
+they provide. If that is the case we fail to identify it and
+think migration is not safe and require VIR_MIGRATE_UNSAFE flag.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 478da65fb46c866973886848ae17f1e16199a77d)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virfile.c | 77 ++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 75 insertions(+), 2 deletions(-)
+
+diff --git a/src/util/virfile.c b/src/util/virfile.c
+index 378d03ecf0..c87e26bf5b 100644
+--- a/src/util/virfile.c
++++ b/src/util/virfile.c
+@@ -3534,6 +3534,76 @@ int virFilePrintf(FILE *fp, const char *msg, ...)
+ # ifndef HUGETLBFS_MAGIC
+ #  define HUGETLBFS_MAGIC 0x958458f6
+ # endif
++# ifndef FUSE_SUPER_MAGIC
++#  define FUSE_SUPER_MAGIC 0x65735546
++# endif
++
++# define PROC_MOUNTS "/proc/mounts"
++
++static int
++virFileIsSharedFixFUSE(const char *path,
++                       long *f_type)
++{
++    char *dirpath = NULL;
++    const char **mounts = NULL;
++    size_t nmounts = 0;
++    char *p;
++    FILE *f = NULL;
++    struct mntent mb;
++    char mntbuf[1024];
++    int ret = -1;
++
++    if (VIR_STRDUP(dirpath, path) < 0)
++        return -1;
++
++    if (!(f = setmntent(PROC_MOUNTS, "r"))) {
++        virReportSystemError(errno,
++                             _("Unable to open %s"),
++                             PROC_MOUNTS);
++        goto cleanup;
++    }
++
++    while (getmntent_r(f, &mb, mntbuf, sizeof(mntbuf))) {
++        if (STRNEQ("fuse.glusterfs", mb.mnt_type))
++            continue;
++
++        if (VIR_APPEND_ELEMENT_COPY(mounts, nmounts, mb.mnt_dir) < 0)
++            goto cleanup;
++    }
++
++    /* Add NULL sentinel so that this is a virStringList */
++    if (VIR_REALLOC_N(mounts, nmounts + 1) < 0)
++        goto cleanup;
++    mounts[nmounts] = NULL;
++
++    do {
++        if ((p = strrchr(dirpath, '/')) == NULL) {
++            virReportSystemError(EINVAL,
++                                 _("Invalid relative path '%s'"), path);
++            goto cleanup;
++        }
++
++        if (p == dirpath)
++            *(p+1) = '\0';
++        else
++            *p = '\0';
++
++        if (virStringListHasString(mounts, dirpath)) {
++            VIR_DEBUG("Found gluster FUSE mountpoint=%s for path=%s. "
++                      "Fixing shared FS type", dirpath, path);
++            *f_type = GFS2_MAGIC;
++            break;
++        }
++    } while (p != dirpath);
++
++    ret = 0;
++ cleanup:
++    endmntent(f);
++    VIR_FREE(mounts);
++    VIR_FREE(dirpath);
++    return ret;
++}
++
+ 
+ int
+ virFileIsSharedFSType(const char *path,
+@@ -3581,6 +3651,11 @@ virFileIsSharedFSType(const char *path,
+         return -1;
+     }
+ 
++    if (sb.f_type == FUSE_SUPER_MAGIC) {
++        VIR_DEBUG("Found FUSE mount for path=%s. Trying to fix it", path);
++        virFileIsSharedFixFUSE(path, (long *) &sb.f_type);
++    }
++
+     VIR_DEBUG("Check if path %s with FS magic %lld is shared",
+               path, (long long int)sb.f_type);
+ 
+@@ -3673,8 +3748,6 @@ virFileGetDefaultHugepageSize(unsigned long long *size)
+     return ret;
+ }
+ 
+-# define PROC_MOUNTS "/proc/mounts"
+-
+ int
+ virFileFindHugeTLBFS(virHugeTLBFSPtr *ret_fs,
+                      size_t *ret_nfs)
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-virFileIsSharedFSType-Detect-direct-mount-points.patch b/SOURCES/libvirt-virFileIsSharedFSType-Detect-direct-mount-points.patch
new file mode 100644
index 0000000..6bdd113
--- /dev/null
+++ b/SOURCES/libvirt-virFileIsSharedFSType-Detect-direct-mount-points.patch
@@ -0,0 +1,80 @@
+From 0525e60f94b22b8736961cb598242384010552c5 Mon Sep 17 00:00:00 2001
+Message-Id: <0525e60f94b22b8736961cb598242384010552c5@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 10 Oct 2018 17:25:55 +0200
+Subject: [PATCH] virFileIsSharedFSType: Detect direct mount points
+
+RHEL-7.7: https://bugzilla.redhat.com/show_bug.cgi?id=1632711
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1634782
+RHEL-7.6.z: https://bugzilla.redhat.com/show_bug.cgi?id=1635705
+
+If the given path is already a mount point (e.g. a bind mount of
+a file, or simply a direct mount point of a FS), then our code
+fails to detect that because the first thing it does is cutting
+off part after last slash '/'.
+
+Conflicts:
+  src/util/virfile.c - VIR_AUTOFREE() stuff
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 98ca1d52a2a871e1c068504450b4dc15db063ef4)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virfile.c  | 9 +++++----
+ tests/virfiletest.c | 3 +--
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/src/util/virfile.c b/src/util/virfile.c
+index 46466ed136..05ecf7bf21 100644
+--- a/src/util/virfile.c
++++ b/src/util/virfile.c
+@@ -3609,7 +3609,8 @@ int
+ virFileIsSharedFSType(const char *path,
+                       int fstypes)
+ {
+-    char *dirpath, *p;
++    char *dirpath;
++    char *p = NULL;
+     struct statfs sb;
+     int statfs_ret;
+     long long f_type = 0;
+@@ -3617,8 +3618,9 @@ virFileIsSharedFSType(const char *path,
+     if (VIR_STRDUP(dirpath, path) < 0)
+         return -1;
+ 
+-    do {
++    statfs_ret = statfs(dirpath, &sb);
+ 
++    while ((statfs_ret < 0) && (p != dirpath)) {
+         /* Try less and less of the path until we get to a
+          * directory we can stat. Even if we don't have 'x'
+          * permission on any directory in the path on the NFS
+@@ -3640,8 +3642,7 @@ virFileIsSharedFSType(const char *path,
+             *p = '\0';
+ 
+         statfs_ret = statfs(dirpath, &sb);
+-
+-    } while ((statfs_ret < 0) && (p != dirpath));
++    }
+ 
+     VIR_FREE(dirpath);
+ 
+diff --git a/tests/virfiletest.c b/tests/virfiletest.c
+index 85f22063fe..80ea34bfa4 100644
+--- a/tests/virfiletest.c
++++ b/tests/virfiletest.c
+@@ -454,8 +454,7 @@ mymain(void)
+     DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts1.txt", "/boot/vmlinuz", false);
+     DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts2.txt", "/run/user/501/gvfs/some/file", false);
+     DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/nfs/file", true);
+-    /* TODO Detect bind mounts */
+-    DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/nfs/blah", true);
++    DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/nfs/blah", false);
+ 
+     return ret != 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+ }
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-virStoragePRDefFormat-Suppress-path-formatting-for-migratable-XML.patch b/SOURCES/libvirt-virStoragePRDefFormat-Suppress-path-formatting-for-migratable-XML.patch
new file mode 100644
index 0000000..d648657
--- /dev/null
+++ b/SOURCES/libvirt-virStoragePRDefFormat-Suppress-path-formatting-for-migratable-XML.patch
@@ -0,0 +1,80 @@
+From 84e5ab0aa4547448e5428ddd05bace35cc57cc56 Mon Sep 17 00:00:00 2001
+Message-Id: <84e5ab0aa4547448e5428ddd05bace35cc57cc56@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 11 Jul 2018 17:27:25 +0200
+Subject: [PATCH] virStoragePRDefFormat: Suppress path formatting for
+ migratable XML
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1470007
+
+If there are managed reservations for a disk source, the path to
+the pr-helper socket is generated automatically by libvirt when
+needed and points somewhere under priv->libDir. Therefore it is
+very unlikely that the path will work even on migration
+destination (the libDir is derived from domain short name and its
+ID).
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 0da435118cb2abe5b747818fc209c7a647590687)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/conf/domain_conf.c    | 3 ++-
+ src/util/virstoragefile.c | 6 ++++--
+ src/util/virstoragefile.h | 3 ++-
+ 3 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index f4e59f6c91..70eb45f03a 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -23548,7 +23548,8 @@ virDomainStorageSourceFormat(virBufferPtr attrBuf,
+         return -1;
+ 
+     if (src->pr)
+-        virStoragePRDefFormat(childBuf, src->pr);
++        virStoragePRDefFormat(childBuf, src->pr,
++                              flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE);
+ 
+     return 0;
+ }
+diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
+index 6ede542df6..58f67278da 100644
+--- a/src/util/virstoragefile.c
++++ b/src/util/virstoragefile.c
+@@ -1982,11 +1982,13 @@ virStoragePRDefParseXML(xmlXPathContextPtr ctxt)
+ 
+ void
+ virStoragePRDefFormat(virBufferPtr buf,
+-                      virStoragePRDefPtr prd)
++                      virStoragePRDefPtr prd,
++                      bool migratable)
+ {
+     virBufferAsprintf(buf, "<reservations managed='%s'",
+                       virTristateBoolTypeToString(prd->managed));
+-    if (prd->path) {
++    if (prd->path &&
++        (prd->managed == VIR_TRISTATE_BOOL_NO || !migratable)) {
+         virBufferAddLit(buf, ">\n");
+         virBufferAdjustIndent(buf, 2);
+         virBufferAddLit(buf, "<source type='unix'");
+diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
+index 592e19bd7f..991098e6c6 100644
+--- a/src/util/virstoragefile.h
++++ b/src/util/virstoragefile.h
+@@ -395,7 +395,8 @@ void virStorageAuthDefFormat(virBufferPtr buf, virStorageAuthDefPtr authdef);
+ void virStoragePRDefFree(virStoragePRDefPtr prd);
+ virStoragePRDefPtr virStoragePRDefParseXML(xmlXPathContextPtr ctxt);
+ void virStoragePRDefFormat(virBufferPtr buf,
+-                           virStoragePRDefPtr prd);
++                           virStoragePRDefPtr prd,
++                           bool migratable);
+ bool virStoragePRDefIsEqual(virStoragePRDefPtr a,
+                             virStoragePRDefPtr b);
+ bool virStoragePRDefIsManaged(virStoragePRDefPtr prd);
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-virfile-Rework-virFileIsSharedFixFUSE.patch b/SOURCES/libvirt-virfile-Rework-virFileIsSharedFixFUSE.patch
new file mode 100644
index 0000000..d049ec7
--- /dev/null
+++ b/SOURCES/libvirt-virfile-Rework-virFileIsSharedFixFUSE.patch
@@ -0,0 +1,151 @@
+From 3d3a4186cbffd454c5f48af7ed7bd3e8934bbb2f Mon Sep 17 00:00:00 2001
+Message-Id: <3d3a4186cbffd454c5f48af7ed7bd3e8934bbb2f@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 10 Oct 2018 17:25:56 +0200
+Subject: [PATCH] virfile: Rework virFileIsSharedFixFUSE
+
+RHEL-7.7: https://bugzilla.redhat.com/show_bug.cgi?id=1632711
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1634782
+RHEL-7.6.z: https://bugzilla.redhat.com/show_bug.cgi?id=1635705
+
+There are couple of things wrong with the current implementation.
+The first one is that in the first loop the code tries to build a
+list of fuse.glusterfs mount points. Well, since the strings are
+allocated in a temporary buffer and are not duplicated this
+results in wrong decision made later in the code.
+
+The second problem is that the code does not take into account
+subtree mounts. For instance, if there's a fuse.gluster mounted
+at /some/path and another FS mounted at /some/path/subdir the
+code would not recognize this subdir mount.
+
+Reported-by: Han Han <hhan@redhat.com>
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 1dbf6222dd5e1fedcbe335fc0852ef66e7a92901)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virfile.c            | 61 ++++++++++++++---------------------
+ tests/virfiledata/mounts3.txt |  2 ++
+ tests/virfiletest.c           |  2 ++
+ 3 files changed, 29 insertions(+), 36 deletions(-)
+
+diff --git a/src/util/virfile.c b/src/util/virfile.c
+index 05ecf7bf21..e1dee7633a 100644
+--- a/src/util/virfile.c
++++ b/src/util/virfile.c
+@@ -3544,18 +3544,14 @@ static int
+ virFileIsSharedFixFUSE(const char *path,
+                        long long *f_type)
+ {
+-    char *dirpath = NULL;
+-    const char **mounts = NULL;
+-    size_t nmounts = 0;
+-    char *p;
+     FILE *f = NULL;
+     struct mntent mb;
+     char mntbuf[1024];
++    char *mntDir = NULL;
++    char *mntType = NULL;
++    size_t maxMatching = 0;
+     int ret = -1;
+ 
+-    if (VIR_STRDUP(dirpath, path) < 0)
+-        return -1;
+-
+     if (!(f = setmntent(PROC_MOUNTS, "r"))) {
+         virReportSystemError(errno,
+                              _("Unable to open %s"),
+@@ -3564,43 +3560,36 @@ virFileIsSharedFixFUSE(const char *path,
+     }
+ 
+     while (getmntent_r(f, &mb, mntbuf, sizeof(mntbuf))) {
+-        if (STRNEQ("fuse.glusterfs", mb.mnt_type))
++        const char *p;
++        size_t len = strlen(mb.mnt_dir);
++
++        if (!(p = STRSKIP(path, mb.mnt_dir)))
+             continue;
+ 
+-        if (VIR_APPEND_ELEMENT_COPY(mounts, nmounts, mb.mnt_dir) < 0)
+-            goto cleanup;
++        if (*(p - 1) != '/' && *p != '/' && *p != '\0')
++            continue;
++
++        if (len > maxMatching) {
++            maxMatching = len;
++            VIR_FREE(mntType);
++            VIR_FREE(mntDir);
++            if (VIR_STRDUP(mntDir, mb.mnt_dir) < 0 ||
++                VIR_STRDUP(mntType, mb.mnt_type) < 0)
++                goto cleanup;
++        }
+     }
+ 
+-    /* Add NULL sentinel so that this is a virStringList */
+-    if (VIR_REALLOC_N(mounts, nmounts + 1) < 0)
+-        goto cleanup;
+-    mounts[nmounts] = NULL;
+-
+-    do {
+-        if ((p = strrchr(dirpath, '/')) == NULL) {
+-            virReportSystemError(EINVAL,
+-                                 _("Invalid relative path '%s'"), path);
+-            goto cleanup;
+-        }
+-
+-        if (p == dirpath)
+-            *(p+1) = '\0';
+-        else
+-            *p = '\0';
+-
+-        if (virStringListHasString(mounts, dirpath)) {
+-            VIR_DEBUG("Found gluster FUSE mountpoint=%s for path=%s. "
+-                      "Fixing shared FS type", dirpath, path);
+-            *f_type = GFS2_MAGIC;
+-            break;
+-        }
+-    } while (p != dirpath);
++    if (STREQ_NULLABLE(mntType, "fuse.glusterfs")) {
++        VIR_DEBUG("Found gluster FUSE mountpoint=%s for path=%s. "
++                  "Fixing shared FS type", mntDir, path);
++        *f_type = GFS2_MAGIC;
++    }
+ 
+     ret = 0;
+  cleanup:
++    VIR_FREE(mntType);
++    VIR_FREE(mntDir);
+     endmntent(f);
+-    VIR_FREE(mounts);
+-    VIR_FREE(dirpath);
+     return ret;
+ }
+ 
+diff --git a/tests/virfiledata/mounts3.txt b/tests/virfiledata/mounts3.txt
+index 226f67dc00..134c6e8f81 100644
+--- a/tests/virfiledata/mounts3.txt
++++ b/tests/virfiledata/mounts3.txt
+@@ -31,3 +31,5 @@ hugetlbfs /hugepages2M hugetlbfs rw,relatime,mode=1777,pagesize=2M 0 0
+ none /run/user/1000 tmpfs rw,relatime,mode=700,uid=1000 0 0
+ host:/nfs /nfs nfs4 rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp6,timeo=600,retrans=2,sec=sys,clientaddr=::,local_lock=none,addr=:: 0 0
+ dev /nfs/blah devtmpfs rw,nosuid,relatime,size=10240k,nr_inodes=4093060,mode=755 0 0
++host:/gv0 /gluster fuse.glusterfs rw 0 0
++root@host:/tmp/mkdir /gluster/sshfs fuse.sshfs rw 0 0
+diff --git a/tests/virfiletest.c b/tests/virfiletest.c
+index 80ea34bfa4..be4dbf8910 100644
+--- a/tests/virfiletest.c
++++ b/tests/virfiletest.c
+@@ -455,6 +455,8 @@ mymain(void)
+     DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts2.txt", "/run/user/501/gvfs/some/file", false);
+     DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/nfs/file", true);
+     DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/nfs/blah", false);
++    DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/gluster/file", true);
++    DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/gluster/sshfs/file", false);
+ 
+     return ret != 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+ }
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-virfile-Take-symlink-into-account-in-virFileIsSharedFixFUSE.patch b/SOURCES/libvirt-virfile-Take-symlink-into-account-in-virFileIsSharedFixFUSE.patch
new file mode 100644
index 0000000..73f2784
--- /dev/null
+++ b/SOURCES/libvirt-virfile-Take-symlink-into-account-in-virFileIsSharedFixFUSE.patch
@@ -0,0 +1,187 @@
+From 666d4aacfd91d8c0447a1e4f8d44d50a3fe40198 Mon Sep 17 00:00:00 2001
+Message-Id: <666d4aacfd91d8c0447a1e4f8d44d50a3fe40198@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Tue, 23 Oct 2018 11:40:58 +0100
+Subject: [PATCH] virfile: Take symlink into account in virFileIsSharedFixFUSE
+
+RHEL-7.7: https://bugzilla.redhat.com/show_bug.cgi?id=1640465
+RHEL-7.6.z: https://bugzilla.redhat.com/show_bug.cgi?id=1641798
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1634782
+
+Weirdly enough, there can be symlinks in the path we are trying
+to fix. If it is the case our clever algorithm that finds matches
+against mount table won't work. Canonicalize path at the
+beginning then.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit c0790e3a09f57da0bd25c7eac4a35ed6e7e9e858)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ cfg.mk              |  2 +-
+ src/util/virfile.c  | 15 +++++++++++++--
+ tests/virfilemock.c | 33 ++++++++++++++++++++++++++++++++-
+ tests/virfiletest.c |  1 +
+ 4 files changed, 47 insertions(+), 4 deletions(-)
+
+diff --git a/cfg.mk b/cfg.mk
+index 6bebd0ad9f..e3e94bf6f0 100644
+--- a/cfg.mk
++++ b/cfg.mk
+@@ -1216,7 +1216,7 @@ exclude_file_name_regexp--sc_prohibit_select = \
+ 	^cfg\.mk$$
+ 
+ exclude_file_name_regexp--sc_prohibit_canonicalize_file_name = \
+-  ^cfg\.mk$$
++  ^(cfg\.mk|tests/virfilemock\.c)$$
+ 
+ exclude_file_name_regexp--sc_prohibit_raw_allocation = \
+   ^(docs/hacking\.html\.in|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c)$$
+diff --git a/src/util/virfile.c b/src/util/virfile.c
+index e1dee7633a..716b55d770 100644
+--- a/src/util/virfile.c
++++ b/src/util/virfile.c
+@@ -3549,9 +3549,19 @@ virFileIsSharedFixFUSE(const char *path,
+     char mntbuf[1024];
+     char *mntDir = NULL;
+     char *mntType = NULL;
++    char *canonPath = NULL;
+     size_t maxMatching = 0;
+     int ret = -1;
+ 
++    if (!(canonPath = virFileCanonicalizePath(path))) {
++        virReportSystemError(errno,
++                             _("unable to canonicalize %s"),
++                             path);
++        return -1;
++    }
++
++    VIR_DEBUG("Path canonicalization: %s->%s", path, canonPath);
++
+     if (!(f = setmntent(PROC_MOUNTS, "r"))) {
+         virReportSystemError(errno,
+                              _("Unable to open %s"),
+@@ -3563,7 +3573,7 @@ virFileIsSharedFixFUSE(const char *path,
+         const char *p;
+         size_t len = strlen(mb.mnt_dir);
+ 
+-        if (!(p = STRSKIP(path, mb.mnt_dir)))
++        if (!(p = STRSKIP(canonPath, mb.mnt_dir)))
+             continue;
+ 
+         if (*(p - 1) != '/' && *p != '/' && *p != '\0')
+@@ -3581,12 +3591,13 @@ virFileIsSharedFixFUSE(const char *path,
+ 
+     if (STREQ_NULLABLE(mntType, "fuse.glusterfs")) {
+         VIR_DEBUG("Found gluster FUSE mountpoint=%s for path=%s. "
+-                  "Fixing shared FS type", mntDir, path);
++                  "Fixing shared FS type", mntDir, canonPath);
+         *f_type = GFS2_MAGIC;
+     }
+ 
+     ret = 0;
+  cleanup:
++    VIR_FREE(canonPath);
+     VIR_FREE(mntType);
+     VIR_FREE(mntDir);
+     endmntent(f);
+diff --git a/tests/virfilemock.c b/tests/virfilemock.c
+index 822c757380..ae5c8d025a 100644
+--- a/tests/virfilemock.c
++++ b/tests/virfilemock.c
+@@ -28,11 +28,14 @@
+ #endif
+ 
+ #include "virmock.h"
++#include "virstring.h"
++#include "viralloc.h"
+ 
+ #define VIR_FROM_THIS VIR_FROM_NONE
+ 
+ static FILE *(*real_setmntent)(const char *filename, const char *type);
+ static int (*real_statfs)(const char *path, struct statfs *buf);
++static char *(*real_canonicalize_file_name)(const char *path);
+ 
+ 
+ static void
+@@ -43,6 +46,7 @@ init_syms(void)
+ 
+     VIR_MOCK_REAL_INIT(setmntent);
+     VIR_MOCK_REAL_INIT(statfs);
++    VIR_MOCK_REAL_INIT(canonicalize_file_name);
+ }
+ 
+ 
+@@ -94,6 +98,7 @@ statfs_mock(const char *mtab,
+     FILE *f;
+     struct mntent mb;
+     char mntbuf[1024];
++    char *canonPath = NULL;
+     int ret = -1;
+ 
+     if (!(f = real_setmntent(mtab, "r"))) {
+@@ -101,10 +106,16 @@ statfs_mock(const char *mtab,
+         return -1;
+     }
+ 
++    /* We don't need to do this in callers because real statfs(2)
++     * does that for us. However, in mocked implementation we
++     * need to do this. */
++    if (!(canonPath = canonicalize_file_name(path)))
++        return -1;
++
+     while (getmntent_r(f, &mb, mntbuf, sizeof(mntbuf))) {
+         int ftype;
+ 
+-        if (STRNEQ(mb.mnt_dir, path))
++        if (STRNEQ(mb.mnt_dir, canonPath))
+             continue;
+ 
+         if (STREQ(mb.mnt_type, "nfs") ||
+@@ -136,6 +147,7 @@ statfs_mock(const char *mtab,
+     }
+ 
+     endmntent(f);
++    VIR_FREE(canonPath);
+     return ret;
+ }
+ 
+@@ -152,3 +164,22 @@ statfs(const char *path, struct statfs *buf)
+ 
+     return real_statfs(path, buf);
+ }
++
++
++char *
++canonicalize_file_name(const char *path)
++{
++    if (getenv("LIBVIRT_MTAB")) {
++        const char *p;
++        char *ret;
++
++        if ((p = STRSKIP(path, "/some/symlink")))
++            ignore_value(virAsprintfQuiet(&ret, "/gluster%s", p));
++        else
++            ignore_value(VIR_STRDUP_QUIET(ret, path));
++
++        return ret;
++    }
++
++    return real_canonicalize_file_name(path);
++}
+diff --git a/tests/virfiletest.c b/tests/virfiletest.c
+index be4dbf8910..a246d601ba 100644
+--- a/tests/virfiletest.c
++++ b/tests/virfiletest.c
+@@ -457,6 +457,7 @@ mymain(void)
+     DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/nfs/blah", false);
+     DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/gluster/file", true);
+     DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/gluster/sshfs/file", false);
++    DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/some/symlink/file", true);
+ 
+     return ret != 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+ }
+-- 
+2.19.2
+
diff --git a/SOURCES/libvirt-virfile-fix-cast-align-error.patch b/SOURCES/libvirt-virfile-fix-cast-align-error.patch
new file mode 100644
index 0000000..6c06a32
--- /dev/null
+++ b/SOURCES/libvirt-virfile-fix-cast-align-error.patch
@@ -0,0 +1,95 @@
+From 63c2edaa16b04d99c9c3d6465cc4aaede3c81588 Mon Sep 17 00:00:00 2001
+Message-Id: <63c2edaa16b04d99c9c3d6465cc4aaede3c81588@dist-git>
+From: Marc Hartmayer <mhartmay@linux.ibm.com>
+Date: Wed, 10 Oct 2018 17:25:52 +0200
+Subject: [PATCH] virfile: fix cast-align error
+
+RHEL-7.7: https://bugzilla.redhat.com/show_bug.cgi?id=1632711
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1634782
+RHEL-7.6.z: https://bugzilla.redhat.com/show_bug.cgi?id=1635705
+
+On s390x the struct member f_type of statsfs is hard coded to 'unsigned
+int'. Change virFileIsSharedFixFUSE() to take a 'long long int' and use
+a temporary to avoid pointer-casting.
+
+This fixes the following error:
+../../src/util/virfile.c:3578:38: error: cast increases required alignment of target type [-Werror=cast-align]
+         virFileIsSharedFixFUSE(path, (long *) &sb.f_type);
+
+Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
+Signed-off-by: Bjoern Walk <bwalk@linux.ibm.com>
+(cherry picked from commit 2b03534eeb2f3f41865538cd4c3e5d326260ad27)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ src/util/virfile.c | 23 +++++++++++++----------
+ 1 file changed, 13 insertions(+), 10 deletions(-)
+
+diff --git a/src/util/virfile.c b/src/util/virfile.c
+index c87e26bf5b..46466ed136 100644
+--- a/src/util/virfile.c
++++ b/src/util/virfile.c
+@@ -3542,7 +3542,7 @@ int virFilePrintf(FILE *fp, const char *msg, ...)
+ 
+ static int
+ virFileIsSharedFixFUSE(const char *path,
+-                       long *f_type)
++                       long long *f_type)
+ {
+     char *dirpath = NULL;
+     const char **mounts = NULL;
+@@ -3612,6 +3612,7 @@ virFileIsSharedFSType(const char *path,
+     char *dirpath, *p;
+     struct statfs sb;
+     int statfs_ret;
++    long long f_type = 0;
+ 
+     if (VIR_STRDUP(dirpath, path) < 0)
+         return -1;
+@@ -3651,32 +3652,34 @@ virFileIsSharedFSType(const char *path,
+         return -1;
+     }
+ 
+-    if (sb.f_type == FUSE_SUPER_MAGIC) {
++    f_type = sb.f_type;
++
++    if (f_type == FUSE_SUPER_MAGIC) {
+         VIR_DEBUG("Found FUSE mount for path=%s. Trying to fix it", path);
+-        virFileIsSharedFixFUSE(path, (long *) &sb.f_type);
++        virFileIsSharedFixFUSE(path, &f_type);
+     }
+ 
+     VIR_DEBUG("Check if path %s with FS magic %lld is shared",
+-              path, (long long int)sb.f_type);
++              path, f_type);
+ 
+     if ((fstypes & VIR_FILE_SHFS_NFS) &&
+-        (sb.f_type == NFS_SUPER_MAGIC))
++        (f_type == NFS_SUPER_MAGIC))
+         return 1;
+ 
+     if ((fstypes & VIR_FILE_SHFS_GFS2) &&
+-        (sb.f_type == GFS2_MAGIC))
++        (f_type == GFS2_MAGIC))
+         return 1;
+     if ((fstypes & VIR_FILE_SHFS_OCFS) &&
+-        (sb.f_type == OCFS2_SUPER_MAGIC))
++        (f_type == OCFS2_SUPER_MAGIC))
+         return 1;
+     if ((fstypes & VIR_FILE_SHFS_AFS) &&
+-        (sb.f_type == AFS_FS_MAGIC))
++        (f_type == AFS_FS_MAGIC))
+         return 1;
+     if ((fstypes & VIR_FILE_SHFS_SMB) &&
+-        (sb.f_type == SMB_SUPER_MAGIC))
++        (f_type == SMB_SUPER_MAGIC))
+         return 1;
+     if ((fstypes & VIR_FILE_SHFS_CIFS) &&
+-        (sb.f_type == CIFS_SUPER_MAGIC))
++        (f_type == CIFS_SUPER_MAGIC))
+         return 1;
+ 
+     return 0;
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-virfiletest-Fix-test-name-prefix-for-virFileInData-test.patch b/SOURCES/libvirt-virfiletest-Fix-test-name-prefix-for-virFileInData-test.patch
new file mode 100644
index 0000000..af7d072
--- /dev/null
+++ b/SOURCES/libvirt-virfiletest-Fix-test-name-prefix-for-virFileInData-test.patch
@@ -0,0 +1,37 @@
+From c8f85424443d570863cdbfe93df75f9060d761ce Mon Sep 17 00:00:00 2001
+Message-Id: <c8f85424443d570863cdbfe93df75f9060d761ce@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 10 Oct 2018 17:25:53 +0200
+Subject: [PATCH] virfiletest: Fix test name prefix for virFileInData test
+
+RHEL-7.7: https://bugzilla.redhat.com/show_bug.cgi?id=1632711
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1634782
+RHEL-7.6.z: https://bugzilla.redhat.com/show_bug.cgi?id=1635705
+
+Because of lacking virTestCounterReset() call, the old test cases
+name was preserved.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit 6814ac678e07ea3f2f8351eb75c82af9ad9d727f)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ tests/virfiletest.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tests/virfiletest.c b/tests/virfiletest.c
+index a15495e9e8..790911cacb 100644
+--- a/tests/virfiletest.c
++++ b/tests/virfiletest.c
+@@ -389,6 +389,7 @@ mymain(void)
+     } while (0)
+ 
+     if (holesSupported()) {
++        virTestCounterReset("testFileInData ");
+         DO_TEST_IN_DATA(true, 4, 4, 4);
+         DO_TEST_IN_DATA(false, 4, 4, 4);
+         DO_TEST_IN_DATA(true, 8, 8, 8);
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-virfiletst-Test-virFileIsSharedFS.patch b/SOURCES/libvirt-virfiletst-Test-virFileIsSharedFS.patch
new file mode 100644
index 0000000..dd81c85
--- /dev/null
+++ b/SOURCES/libvirt-virfiletst-Test-virFileIsSharedFS.patch
@@ -0,0 +1,358 @@
+From 137a29247f0989440ffbd42f7f56da154eb6003a Mon Sep 17 00:00:00 2001
+Message-Id: <137a29247f0989440ffbd42f7f56da154eb6003a@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 10 Oct 2018 17:25:54 +0200
+Subject: [PATCH] virfiletst: Test virFileIsSharedFS
+
+RHEL-7.7: https://bugzilla.redhat.com/show_bug.cgi?id=1632711
+RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1634782
+RHEL-7.6.z: https://bugzilla.redhat.com/show_bug.cgi?id=1635705
+
+Introduce some basic test cases for virFileIsSharedFS(). More
+will be added later. In order to achieve desired result, mocks
+for setmntent() and statfs() need to be invented because the
+first thing that virFileIsSharedFS() does is calling the latter.
+If it finds a FUSE mount it'll call the former.
+
+The mock might look a bit complicated, but in fact it's quite
+simple. The test sets LIBVIRT_MTAB env variable to hold the
+absolute path to a file containing mount table. Then, statfs()
+returns matching FS it finds, and setmntent() is there just to
+replace /proc/mounts with the file the test wants to load.
+
+Adding this test also exposed a bug we have - because we assume
+the given path points to a file we cut off what we assume is a
+file name to obtain directory path and only then we call
+statfs(). This is buggy because the passed path could be already
+a mount point.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit a7b4eb7d261255d70d90047ae34e8eea849053f2)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ tests/Makefile.am             |   7 +-
+ tests/virfiledata/mounts3.txt |  33 ++++++++
+ tests/virfilemock.c           | 154 ++++++++++++++++++++++++++++++++++
+ tests/virfiletest.c           |  62 +++++++++++++-
+ 4 files changed, 254 insertions(+), 2 deletions(-)
+ create mode 100644 tests/virfiledata/mounts3.txt
+ create mode 100644 tests/virfilemock.c
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 41905d1a4d..c0337ea10c 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -242,6 +242,7 @@ test_libraries += virusbmock.la \
+ 	virnetdevbandwidthmock.la \
+ 	virnumamock.la \
+ 	virtestmock.la \
++	virfilemock.la \
+ 	$(NULL)
+ endif WITH_LINUX
+ 
+@@ -1163,9 +1164,13 @@ virresctrltest_SOURCES = \
+ 	virresctrltest.c testutils.h testutils.c virfilewrapper.h virfilewrapper.c
+ virresctrltest_LDADD = $(LDADDS)
+ 
++virfilemock_la_SOURCES = \
++	virfilemock.c
++virfilemock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS)
++virfilemock_la_LIBADD = $(MOCKLIBS_LIBS)
+ else ! WITH_LINUX
+ EXTRA_DIST += vircaps2xmltest.c virnumamock.c virfilewrapper.c \
+-			  virfilewrapper.h virresctrltest.c
++			  virfilewrapper.h virresctrltest.c virfilemock.c
+ endif ! WITH_LINUX
+ 
+ if WITH_NSS
+diff --git a/tests/virfiledata/mounts3.txt b/tests/virfiledata/mounts3.txt
+new file mode 100644
+index 0000000000..226f67dc00
+--- /dev/null
++++ b/tests/virfiledata/mounts3.txt
+@@ -0,0 +1,33 @@
++/dev/root / xfs rw,noatime,attr2,inode64,noquota 0 0
++proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
++tmpfs /run tmpfs rw,nodev,relatime,size=3281436k,mode=755 0 0
++sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
++dev /dev devtmpfs rw,nosuid,relatime,size=10240k,nr_inodes=4093060,mode=755 0 0
++securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
++debugfs /sys/kernel/debug debugfs rw,nosuid,nodev,noexec,relatime 0 0
++mqueue /dev/mqueue mqueue rw,nosuid,nodev,noexec,relatime 0 0
++configfs /sys/kernel/config configfs rw,nosuid,nodev,noexec,relatime 0 0
++devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
++fusectl /sys/fs/fuse/connections fusectl rw,nosuid,nodev,noexec,relatime 0 0
++shm /dev/shm tmpfs rw,nosuid,nodev,noexec,relatime 0 0
++cgroup_root /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,relatime,size=10240k,mode=755 0 0
++openrc /sys/fs/cgroup/openrc cgroup rw,nosuid,nodev,noexec,relatime,release_agent=/lib/rc/sh/cgroup-release-agent.sh,name=openrc 0 0
++none /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0
++cpuset /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
++cpu /sys/fs/cgroup/cpu cgroup rw,nosuid,nodev,noexec,relatime,cpu 0 0
++cpuacct /sys/fs/cgroup/cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct 0 0
++blkio /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
++memory /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
++devices /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
++freezer /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
++net_cls /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0
++perf_event /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
++net_prio /sys/fs/cgroup/net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_prio 0 0
++hugetlb /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
++pids /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
++rdma /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0
++binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime 0 0
++hugetlbfs /hugepages2M hugetlbfs rw,relatime,mode=1777,pagesize=2M 0 0
++none /run/user/1000 tmpfs rw,relatime,mode=700,uid=1000 0 0
++host:/nfs /nfs nfs4 rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp6,timeo=600,retrans=2,sec=sys,clientaddr=::,local_lock=none,addr=:: 0 0
++dev /nfs/blah devtmpfs rw,nosuid,relatime,size=10240k,nr_inodes=4093060,mode=755 0 0
+diff --git a/tests/virfilemock.c b/tests/virfilemock.c
+new file mode 100644
+index 0000000000..822c757380
+--- /dev/null
++++ b/tests/virfilemock.c
+@@ -0,0 +1,154 @@
++/*
++ * Copyright (C) 2018 Red Hat, Inc.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library.  If not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Author: Michal Privoznik <mprivozn@redhat.com>
++ */
++
++#include <config.h>
++
++#include <stdio.h>
++#include <mntent.h>
++#include <sys/vfs.h>
++#if HAVE_LINUX_MAGIC_H
++# include <linux/magic.h>
++#endif
++
++#include "virmock.h"
++
++#define VIR_FROM_THIS VIR_FROM_NONE
++
++static FILE *(*real_setmntent)(const char *filename, const char *type);
++static int (*real_statfs)(const char *path, struct statfs *buf);
++
++
++static void
++init_syms(void)
++{
++    if (real_setmntent)
++        return;
++
++    VIR_MOCK_REAL_INIT(setmntent);
++    VIR_MOCK_REAL_INIT(statfs);
++}
++
++
++FILE *
++setmntent(const char *filename, const char *type)
++{
++    const char *mtab;
++
++    init_syms();
++
++    if ((mtab = getenv("LIBVIRT_MTAB")))
++        filename = mtab;
++
++    return real_setmntent(filename, type);
++}
++
++
++#ifndef NFS_SUPER_MAGIC
++# define NFS_SUPER_MAGIC 0x6969
++#endif
++#ifndef OCFS2_SUPER_MAGIC
++# define OCFS2_SUPER_MAGIC 0x7461636f
++#endif
++#ifndef GFS2_MAGIC
++# define GFS2_MAGIC 0x01161970
++#endif
++#ifndef AFS_FS_MAGIC
++# define AFS_FS_MAGIC 0x6B414653
++#endif
++#ifndef SMB_SUPER_MAGIC
++# define SMB_SUPER_MAGIC 0x517B
++#endif
++#ifndef CIFS_SUPER_MAGIC
++# define CIFS_SUPER_MAGIC 0xFF534D42
++#endif
++#ifndef HUGETLBFS_MAGIC
++# define HUGETLBFS_MAGIC 0x958458f6
++#endif
++#ifndef FUSE_SUPER_MAGIC
++# define FUSE_SUPER_MAGIC 0x65735546
++#endif
++
++
++static int
++statfs_mock(const char *mtab,
++            const char *path,
++            struct statfs *buf)
++{
++    FILE *f;
++    struct mntent mb;
++    char mntbuf[1024];
++    int ret = -1;
++
++    if (!(f = real_setmntent(mtab, "r"))) {
++        fprintf(stderr, "Unable to open %s", mtab);
++        return -1;
++    }
++
++    while (getmntent_r(f, &mb, mntbuf, sizeof(mntbuf))) {
++        int ftype;
++
++        if (STRNEQ(mb.mnt_dir, path))
++            continue;
++
++        if (STREQ(mb.mnt_type, "nfs") ||
++            STREQ(mb.mnt_type, "nfs4")) {
++            ftype = NFS_SUPER_MAGIC;
++        } else if (STREQ(mb.mnt_type, "gfs2")||
++                   STREQ(mb.mnt_type, "gfs2meta")) {
++            ftype = GFS2_MAGIC;
++        } else if (STREQ(mb.mnt_type, "ocfs2")) {
++            ftype = OCFS2_SUPER_MAGIC;
++        } else if (STREQ(mb.mnt_type, "afs")) {
++            ftype = AFS_FS_MAGIC;
++        } else if (STREQ(mb.mnt_type, "smb3")) {
++            ftype = SMB_SUPER_MAGIC;
++        } else if (STREQ(mb.mnt_type, "cifs")) {
++            ftype = CIFS_SUPER_MAGIC;
++        } else if (STRPREFIX(mb.mnt_type, "fuse")) {
++            ftype = FUSE_SUPER_MAGIC;
++        } else {
++            /* Everything else is EXT4. We don't care really for other paths. */
++            ftype = EXT4_SUPER_MAGIC;
++        }
++
++        memset(buf, 0, sizeof(*buf));
++        /* We only care about f_type so far. */
++        buf->f_type = ftype;
++        ret = 0;
++        break;
++    }
++
++    endmntent(f);
++    return ret;
++}
++
++
++int
++statfs(const char *path, struct statfs *buf)
++{
++    const char *mtab;
++
++    init_syms();
++
++    if ((mtab = getenv("LIBVIRT_MTAB")))
++        return statfs_mock(mtab, path, buf);
++
++    return real_statfs(path, buf);
++}
+diff --git a/tests/virfiletest.c b/tests/virfiletest.c
+index 790911cacb..85f22063fe 100644
+--- a/tests/virfiletest.c
++++ b/tests/virfiletest.c
+@@ -31,6 +31,7 @@
+ # include <linux/falloc.h>
+ #endif
+ 
++#define VIR_FROM_THIS VIR_FROM_NONE
+ 
+ #if defined HAVE_MNTENT_H && defined HAVE_GETMNTENT_R
+ static int testFileCheckMounts(const char *prefix,
+@@ -310,6 +311,48 @@ testFileInData(const void *opaque)
+ }
+ 
+ 
++struct testFileIsSharedFSType {
++    const char *mtabFile;
++    const char *filename;
++    const bool expected;
++};
++
++static int
++testFileIsSharedFSType(const void *opaque ATTRIBUTE_UNUSED)
++{
++#ifndef __linux__
++    return EXIT_AM_SKIP;
++#else
++    const struct testFileIsSharedFSType *data = opaque;
++    char *mtabFile = NULL;
++    bool actual;
++    int ret = -1;
++
++    if (virAsprintf(&mtabFile, abs_srcdir "/virfiledata/%s", data->mtabFile) < 0)
++        return -1;
++
++    if (setenv("LIBVIRT_MTAB", mtabFile, 1) < 0) {
++        fprintf(stderr, "Unable to set env variable\n");
++        goto cleanup;
++    }
++
++    actual = virFileIsSharedFS(data->filename);
++
++    if (actual != data->expected) {
++        fprintf(stderr, "Unexpected FS type. Expected %d got %d\n",
++                data->expected, actual);
++        goto cleanup;
++    }
++
++    ret = 0;
++ cleanup:
++    VIR_FREE(mtabFile);
++    unsetenv("LIBVIRT_MTAB");
++    return ret;
++#endif
++}
++
++
+ static int
+ mymain(void)
+ {
+@@ -397,7 +440,24 @@ mymain(void)
+         DO_TEST_IN_DATA(true, 8, 16, 32, 64, 128, 256, 512);
+         DO_TEST_IN_DATA(false, 8, 16, 32, 64, 128, 256, 512);
+     }
++
++#define DO_TEST_FILE_IS_SHARED_FS_TYPE(mtab, file, exp) \
++    do { \
++        struct testFileIsSharedFSType data = { \
++            .mtabFile = mtab, .filename = file, .expected = exp \
++        }; \
++        if (virTestRun(virTestCounterNext(), testFileIsSharedFSType, &data) < 0) \
++            ret = -1; \
++    } while (0)
++
++    virTestCounterReset("testFileIsSharedFSType ");
++    DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts1.txt", "/boot/vmlinuz", false);
++    DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts2.txt", "/run/user/501/gvfs/some/file", false);
++    DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/nfs/file", true);
++    /* TODO Detect bind mounts */
++    DO_TEST_FILE_IS_SHARED_FS_TYPE("mounts3.txt", "/nfs/blah", true);
++
+     return ret != 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+ }
+ 
+-VIR_TEST_MAIN(mymain)
++VIR_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/virfilemock.so")
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-virnetdevtap-Don-t-crash-on-ifname-in-virNetDevTapInterfaceStats.patch b/SOURCES/libvirt-virnetdevtap-Don-t-crash-on-ifname-in-virNetDevTapInterfaceStats.patch
new file mode 100644
index 0000000..060848f
--- /dev/null
+++ b/SOURCES/libvirt-virnetdevtap-Don-t-crash-on-ifname-in-virNetDevTapInterfaceStats.patch
@@ -0,0 +1,60 @@
+From 340b09010e2c329608af82c2fbd8cb73209eb58c Mon Sep 17 00:00:00 2001
+Message-Id: <340b09010e2c329608af82c2fbd8cb73209eb58c@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Fri, 13 Jul 2018 15:44:42 +0200
+Subject: [PATCH] virnetdevtap: Don't crash on !ifname in
+ virNetDevTapInterfaceStats
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1595184
+
+Some domain <interfaces/> do not have a name (because they are
+not TAP devices). Therefore, if
+virNetDevTapInterfaceStats(net->ifname, ...) is called an instant
+crash occurs. In Linux version of the function strlen() is called
+over the name and in BSD version STREQ() is called.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit 318d54e5201295239869655c2c60fb44d9d9466e)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/util/virnetdevtap.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c
+index bd0710ad2e..3118ca18e8 100644
+--- a/src/util/virnetdevtap.c
++++ b/src/util/virnetdevtap.c
+@@ -691,6 +691,12 @@ virNetDevTapInterfaceStats(const char *ifname,
+     FILE *fp;
+     char line[256], *colon;
+ 
++    if (!ifname) {
++        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
++                       _("Interface name not provided"));
++        return -1;
++    }
++
+     fp = fopen("/proc/net/dev", "r");
+     if (!fp) {
+         virReportSystemError(errno, "%s",
+@@ -768,6 +774,12 @@ virNetDevTapInterfaceStats(const char *ifname,
+     struct if_data *ifd;
+     int ret = -1;
+ 
++    if (!ifname) {
++        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
++                       _("Interface name not provided"));
++        return -1;
++    }
++
+     if (getifaddrs(&ifap) < 0) {
+         virReportSystemError(errno, "%s",
+                              _("Could not get interface list"));
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-virrandom-Avoid-undefined-behaviour-in-virRandomBits.patch b/SOURCES/libvirt-virrandom-Avoid-undefined-behaviour-in-virRandomBits.patch
new file mode 100644
index 0000000..247a39e
--- /dev/null
+++ b/SOURCES/libvirt-virrandom-Avoid-undefined-behaviour-in-virRandomBits.patch
@@ -0,0 +1,40 @@
+From 0a774bbd6c55f95a9cd106a0c79881a52b9cbdbc Mon Sep 17 00:00:00 2001
+Message-Id: <0a774bbd6c55f95a9cd106a0c79881a52b9cbdbc@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Mon, 3 Dec 2018 08:46:19 -0500
+Subject: [PATCH] virrandom: Avoid undefined behaviour in virRandomBits
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1655586 [RHEL8]
+https://bugzilla.redhat.com/show_bug.cgi?id=1652894 [RHEL7]
+
+If nbits is 64 (or greater) then shifting 1ULL left is undefined.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit 0a5a6f0d019996b015bb0acbe30efa8f2fbbb351)
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+---
+ src/util/virrandom.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/util/virrandom.c b/src/util/virrandom.c
+index 3c011a8615..7915f6531e 100644
+--- a/src/util/virrandom.c
++++ b/src/util/virrandom.c
+@@ -68,7 +68,9 @@ uint64_t virRandomBits(int nbits)
+         return 0;
+     }
+ 
+-    ret &= (1ULL << nbits) - 1;
++    if (nbits < 64)
++        ret &= (1ULL << nbits) - 1;
++
+     return ret;
+ }
+ 
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-virsh-Require-explicit-domain-for-domxml-to-native.patch b/SOURCES/libvirt-virsh-Require-explicit-domain-for-domxml-to-native.patch
new file mode 100644
index 0000000..e566fb7
--- /dev/null
+++ b/SOURCES/libvirt-virsh-Require-explicit-domain-for-domxml-to-native.patch
@@ -0,0 +1,90 @@
+From 7875a7866086dc80e174dd62a53aa687daa012c7 Mon Sep 17 00:00:00 2001
+Message-Id: <7875a7866086dc80e174dd62a53aa687daa012c7@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Wed, 26 Sep 2018 09:59:08 +0200
+Subject: [PATCH] virsh: Require explicit --domain for domxml-to-native
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The domxml-to-native virsh command accepts either --xml or --domain
+option followed by a file or domain name respectively. The --domain
+option is documented as required, which means an argument with no option
+is treated as --xml. Commit v4.3.0-127-gd86531daf2 broke this by making
+--domain optional and thus an argument with no option was treated as
+--domain.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1633077
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+(cherry picked from commit b7ccd0757de73344a4b973ede946dad40de846c7)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1634769
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ tools/virsh-domain.c | 6 +++---
+ tools/virsh.h        | 8 +++++---
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
+index 6aa79f11b9..db4834dd1f 100644
+--- a/tools/virsh-domain.c
++++ b/tools/virsh-domain.c
+@@ -9387,7 +9387,7 @@ static const vshCmdInfo info_qemu_monitor_event[] = {
+ 
+ static const vshCmdOptDef opts_qemu_monitor_event[] = {
+     VIRSH_COMMON_OPT_DOMAIN_OT_STRING(N_("filter by domain name, id or uuid"),
+-                                      0),
++                                      0, 0),
+     {.name = "event",
+      .type = VSH_OT_STRING,
+      .help = N_("filter by event name")
+@@ -9940,7 +9940,7 @@ static const vshCmdOptDef opts_domxmltonative[] = {
+      .flags = VSH_OFLAG_REQ,
+      .help = N_("target config data type format")
+     },
+-    VIRSH_COMMON_OPT_DOMAIN_OT_STRING_FULL(0),
++    VIRSH_COMMON_OPT_DOMAIN_OT_STRING_FULL(VSH_OFLAG_REQ_OPT, 0),
+     {.name = "xml",
+      .type = VSH_OT_STRING,
+      .help = N_("xml data file to export from")
+@@ -13189,7 +13189,7 @@ static const vshCmdInfo info_event[] = {
+ 
+ static const vshCmdOptDef opts_event[] = {
+     VIRSH_COMMON_OPT_DOMAIN_OT_STRING(N_("filter by domain name, id or uuid"),
+-                                      0),
++                                      0, 0),
+     {.name = "event",
+      .type = VSH_OT_STRING,
+      .completer = virshDomainEventNameCompleter,
+diff --git a/tools/virsh.h b/tools/virsh.h
+index e164aabcee..b0a3cdbb97 100644
+--- a/tools/virsh.h
++++ b/tools/virsh.h
+@@ -110,16 +110,18 @@
+      .help = _helpstr \
+     }
+ 
+-# define VIRSH_COMMON_OPT_DOMAIN_OT_STRING(_helpstr, cflags) \
++# define VIRSH_COMMON_OPT_DOMAIN_OT_STRING(_helpstr, oflags, cflags) \
+     {.name = "domain", \
+      .type = VSH_OT_STRING, \
++     .flags = oflags, \
+      .help = _helpstr, \
+      .completer = virshDomainNameCompleter, \
+      .completer_flags = cflags, \
+     }
+ 
+-# define VIRSH_COMMON_OPT_DOMAIN_OT_STRING_FULL(cflags) \
+-    VIRSH_COMMON_OPT_DOMAIN_OT_STRING(N_("domain name, id or uuid"), cflags)
++# define VIRSH_COMMON_OPT_DOMAIN_OT_STRING_FULL(oflags, cflags) \
++    VIRSH_COMMON_OPT_DOMAIN_OT_STRING(N_("domain name, id or uuid"), \
++                                      oflags, cflags)
+ 
+ # define VIRSH_COMMON_OPT_DOMAIN_OT_ARGV(_helpstr, cflags) \
+     {.name = "domain", \
+-- 
+2.19.1
+
diff --git a/SOURCES/libvirt-virsh-Strip-XML-declaration-when-extracting-CPU-XMLs.patch b/SOURCES/libvirt-virsh-Strip-XML-declaration-when-extracting-CPU-XMLs.patch
new file mode 100644
index 0000000..9a80dee
--- /dev/null
+++ b/SOURCES/libvirt-virsh-Strip-XML-declaration-when-extracting-CPU-XMLs.patch
@@ -0,0 +1,63 @@
+From 45fb61b56bbd74f365b71e9e35bf953dc045833e Mon Sep 17 00:00:00 2001
+Message-Id: <45fb61b56bbd74f365b71e9e35bf953dc045833e@dist-git>
+From: Jiri Denemark <jdenemar@redhat.com>
+Date: Thu, 22 Nov 2018 16:28:56 +0100
+Subject: [PATCH] virsh: Strip XML declaration when extracting CPU XMLs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since commit v4.3.0-336-gc84726fbdd all
+{hypervisor-,}cpu-{baseline,compare} commands use a generic
+vshExtractCPUDefXMLs helper for extracting individual CPU definitions
+from the provided input file. The helper wraps the input file in a
+<container> element so that several independent elements can be easily
+parsed from the file. This works fine except when the file starts with
+XML declaration (<?xml version="1.0" ... ?>) because the XML declaration
+cannot be put inside any element. In fact it has to be at the very
+beginning of the XML document without any preceding white space
+characters. We can just simply skip the XML declaration.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1592737
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit fcd1c865e168bdb9763b19e790c15e80aa29be66)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1659048
+
+Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ tools/virsh-host.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/tools/virsh-host.c b/tools/virsh-host.c
+index 16f504bafe..b7f86bdd91 100644
+--- a/tools/virsh-host.c
++++ b/tools/virsh-host.c
+@@ -1130,13 +1130,20 @@ vshExtractCPUDefXMLs(vshControl *ctl,
+     xmlDocPtr xml = NULL;
+     xmlXPathContextPtr ctxt = NULL;
+     xmlNodePtr *nodes = NULL;
++    char *doc;
+     size_t i;
+     int n;
+ 
+     if (virFileReadAll(xmlFile, VSH_MAX_XML_FILE, &buffer) < 0)
+         goto error;
+ 
+-    if (virAsprintf(&xmlStr, "<container>%s</container>", buffer) < 0)
++    /* Strip possible XML declaration */
++    if (STRPREFIX(buffer, "<?xml") && (doc = strstr(buffer, "?>")))
++        doc += 2;
++    else
++        doc = buffer;
++
++    if (virAsprintf(&xmlStr, "<container>%s</container>", doc) < 0)
+         goto error;
+ 
+     if (!(xml = virXMLParseStringCtxt(xmlStr, xmlFile, &ctxt)))
+-- 
+2.20.1
+
diff --git a/SOURCES/libvirt-virsh.pod-Drop-persistent-for-detach-device-alias.patch b/SOURCES/libvirt-virsh.pod-Drop-persistent-for-detach-device-alias.patch
new file mode 100644
index 0000000..91c3355
--- /dev/null
+++ b/SOURCES/libvirt-virsh.pod-Drop-persistent-for-detach-device-alias.patch
@@ -0,0 +1,35 @@
+From e0cfb484ad357016730e78d216b901c8a682ff2d Mon Sep 17 00:00:00 2001
+Message-Id: <e0cfb484ad357016730e78d216b901c8a682ff2d@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Thu, 5 Jul 2018 09:35:01 +0200
+Subject: [PATCH] virsh.pod: Drop --persistent for detach-device-alias
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1598087
+
+The detach-device-alias never supported --persistent argument.
+Drop it from the man page.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+(cherry picked from commit 31afed468544ad631a7d033fd9cf225e2a1362ad)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
+---
+ tools/virsh.pod | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/virsh.pod b/tools/virsh.pod
+index dc100db9f3..003becb7c3 100644
+--- a/tools/virsh.pod
++++ b/tools/virsh.pod
+@@ -3197,7 +3197,7 @@ Note that older versions of virsh used I<--config> as an alias for
+ I<--persistent>.
+ 
+ =item B<detach-device-alias> I<domain> I<alias>
+-[[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
++[[[I<--live>] [I<--config>] | [I<--current>]]]]
+ 
+ Detach a device with given I<alias> from the I<domain>.
+ 
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-virsh.pod-Fix-a-command-name-typo-in-nwfilter-binding-undefine.patch b/SOURCES/libvirt-virsh.pod-Fix-a-command-name-typo-in-nwfilter-binding-undefine.patch
new file mode 100644
index 0000000..59da4a3
--- /dev/null
+++ b/SOURCES/libvirt-virsh.pod-Fix-a-command-name-typo-in-nwfilter-binding-undefine.patch
@@ -0,0 +1,39 @@
+From 3343d86b88ab3b1558bd5b743b2b4bab650f6a71 Mon Sep 17 00:00:00 2001
+Message-Id: <3343d86b88ab3b1558bd5b743b2b4bab650f6a71@dist-git>
+From: Han Han <hhan@redhat.com>
+Date: Fri, 13 Jul 2018 13:05:16 +0200
+Subject: [PATCH] virsh.pod: Fix a command name typo in
+ nwfilter-binding-undefine
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The true name of the command is nwfilter-binding-delete.
+
+Signed-off-by: Han Han <hhan@redhat.com>
+Reviewed-by: Erik Skultety <eskultet@redhat.com>
+(cherry picked from commit 955c4318bf7a74d717ce5ce8b3a9040ad657a94c)
+
+https: //bugzilla.redhat.com/show_bug.cgi?id=1600329
+Signed-off-by: Erik Skultety <eskultet@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ tools/virsh.pod | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/virsh.pod b/tools/virsh.pod
+index 003becb7c3..368ce89ed8 100644
+--- a/tools/virsh.pod
++++ b/tools/virsh.pod
+@@ -4827,7 +4827,7 @@ of the network filters directly.
+ Associate a network port with a network filter. The network filter backend
+ will immediately attempt to instantiate the filter rules on the port.
+ 
+-=item B<nwfilter-binding-undefine> I<port-name>
++=item B<nwfilter-binding-delete> I<port-name>
+ 
+ Disassociate a network port from a network filter. The network filter
+ backend will immediately tear down the filter rules that exist on the
+-- 
+2.18.0
+
diff --git a/SOURCES/libvirt-virt-xml-validate-Add-schema-for-nwfilterbinding.patch b/SOURCES/libvirt-virt-xml-validate-Add-schema-for-nwfilterbinding.patch
new file mode 100644
index 0000000..4b1ada4
--- /dev/null
+++ b/SOURCES/libvirt-virt-xml-validate-Add-schema-for-nwfilterbinding.patch
@@ -0,0 +1,53 @@
+From 988f1476012e203e0610d891d6d59d76ec196395 Mon Sep 17 00:00:00 2001
+Message-Id: <988f1476012e203e0610d891d6d59d76ec196395@dist-git>
+From: Han Han <hhan@redhat.com>
+Date: Thu, 19 Jul 2018 16:23:39 -0400
+Subject: [PATCH] virt-xml-validate: Add schema for nwfilterbinding
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1600330
+
+Add nwfilterbinding schema in virt-xml-validate for autoprobing.
+Add document of nwfilterbinding schema in tools/virt-xml-validate.pod.
+
+Signed-off-by: Han Han <hhan@redhat.com>
+Reviewed-by: John Ferlan <jferlan@redhat.com>
+(cherry picked from commit a47d053720f3b4965184bc9a5a87a86d301957ea)
+Signed-off-by: John Ferlan <jferlan@redhat.com>
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+---
+ tools/virt-xml-validate.in  | 3 +++
+ tools/virt-xml-validate.pod | 4 ++++
+ 2 files changed, 7 insertions(+)
+
+diff --git a/tools/virt-xml-validate.in b/tools/virt-xml-validate.in
+index 81fde4d832..7513413189 100644
+--- a/tools/virt-xml-validate.in
++++ b/tools/virt-xml-validate.in
+@@ -77,6 +77,9 @@ if [ -z "$TYPE" ]; then
+      *device*)
+         TYPE="nodedev"
+         ;;
++     *filterbinding*)
++        TYPE="nwfilterbinding"
++        ;;
+      *filter*)
+         TYPE="nwfilter"
+         ;;
+diff --git a/tools/virt-xml-validate.pod b/tools/virt-xml-validate.pod
+index f8e67503fd..a51a57002a 100644
+--- a/tools/virt-xml-validate.pod
++++ b/tools/virt-xml-validate.pod
+@@ -52,6 +52,10 @@ The schema for the XML format used to declare driver capabilities
+ 
+ The schema for the XML format used by network traffic filters
+ 
++=item C<nwfilterbinding>
++
++The schema for XML format used by network filter bindings.
++
+ =item C<secret>
+ 
+ The schema for the XML format used by secrets descriptions
+-- 
+2.18.0
+
diff --git a/SOURCES/symlinks b/SOURCES/symlinks
new file mode 100644
index 0000000..bfa5b22
--- /dev/null
+++ b/SOURCES/symlinks
@@ -0,0 +1,931 @@
+ABOUT-NLS po/README.md
+README README.md
+tests/virt-admin-self-test ./virsh-self-test
+tests/qemuhotplugtestdomains/qemuhotplug-base-live+ivshmem-doorbell-detach.xml qemuhotplug-base-live+ivshmem-plain.xml
+tests/qemuhotplugtestdomains/qemuhotplug-base-live+ivshmem-plain-detach.xml qemuhotplug-base-live.xml
+tests/qemustatusxml2xmldata/blockjob-mirror-out.xml blockjob-mirror-in.xml
+tests/qemustatusxml2xmldata/migration-in-params-out.xml migration-in-params-in.xml
+tests/qemustatusxml2xmldata/migration-out-nbd-tls-out.xml migration-out-nbd-tls-in.xml
+tests/qemustatusxml2xmldata/migration-out-params-out.xml migration-out-params-in.xml
+tests/qemustatusxml2xmldata/modern-out.xml modern-in.xml
+tests/qemustatusxml2xmldata/vcpus-multi-out.xml vcpus-multi-in.xml
+tests/qemuxml2argvdata/aarch64-gic-default-both.args aarch64-gic-v3.args
+tests/qemuxml2argvdata/aarch64-gic-default-both.xml aarch64-gic-default.xml
+tests/qemuxml2argvdata/aarch64-gic-default-v2.args aarch64-gic-v2.args
+tests/qemuxml2argvdata/aarch64-gic-default-v2.xml aarch64-gic-default.xml
+tests/qemuxml2argvdata/aarch64-gic-default-v3.args aarch64-gic-v3.args
+tests/qemuxml2argvdata/aarch64-gic-default-v3.xml aarch64-gic-default.xml
+tests/qemuxml2argvdata/aarch64-gic-default.args aarch64-gic-v2.args
+tests/qemuxml2argvdata/aarch64-gic-none-both.args aarch64-gic-v3.args
+tests/qemuxml2argvdata/aarch64-gic-none-both.xml aarch64-gic-none.xml
+tests/qemuxml2argvdata/aarch64-gic-none-v2.args aarch64-gic-v2.args
+tests/qemuxml2argvdata/aarch64-gic-none-v2.xml aarch64-gic-none.xml
+tests/qemuxml2argvdata/aarch64-gic-none-v3.args aarch64-gic-v3.args
+tests/qemuxml2argvdata/aarch64-gic-none-v3.xml aarch64-gic-none-v2.xml
+tests/qemuxml2argvdata/aarch64-gic-none.args aarch64-gic-v2.args
+tests/qemuxml2argvdata/cpu-check-full.args cpu-check-none.args
+tests/qemuxml2argvdata/cpu-check-partial.args cpu-check-none.args
+tests/qemuxml2argvdata/mach-virt-console-native.args mach-virt-serial-native.args
+tests/qemuxml2argvdata/mach-virt-serial+console-native.args mach-virt-serial-native.args
+tests/qemuxml2argvdata/mach-virt-serial-compat.args mach-virt-serial-native.args
+tests/qemuxml2argvdata/pci-rom-disabled-invalid.args pci-rom-disabled.args
+tests/qemuxml2argvdata/ppc64-usb-controller-legacy.xml ppc64-usb-controller.xml
+tests/qemuxml2argvdata/ppc64-usb-controller-qemu-xhci.xml ppc64-usb-controller.xml
+tests/qemuxml2argvdata/pseries-console-native.args pseries-serial-native.args
+tests/qemuxml2argvdata/pseries-serial+console-native.args pseries-serial-native.args
+tests/qemuxml2argvdata/pseries-serial-compat.args pseries-serial-native.args
+tests/qemuxml2argvdata/q35-virtio-pci.xml q35-pcie.xml
+tests/qemuxml2argvdata/usb-controller-default-unavailable-q35.xml usb-controller-default-q35.xml
+tests/qemuxml2argvdata/usb-controller-explicit-unavailable-q35.xml usb-controller-explicit-q35.xml
+tests/qemuxml2argvdata/usb-controller-qemu-xhci-unavailable.xml usb-controller-qemu-xhci.xml
+tests/qemuxml2argvdata/user-aliases2.args boot-floppy-q35.args
+tests/qemuxml2xmloutdata/aarch64-gic-default-both.xml ../qemuxml2argvdata/aarch64-gic-v3.xml
+tests/qemuxml2xmloutdata/aarch64-gic-default-v2.xml ../qemuxml2argvdata/aarch64-gic-v2.xml
+tests/qemuxml2xmloutdata/aarch64-gic-default-v3.xml ../qemuxml2argvdata/aarch64-gic-v3.xml
+tests/qemuxml2xmloutdata/aarch64-gic-default.xml ../qemuxml2argvdata/aarch64-gic-v2.xml
+tests/qemuxml2xmloutdata/aarch64-gic-host.xml ../qemuxml2argvdata/aarch64-gic-host.xml
+tests/qemuxml2xmloutdata/aarch64-gic-none-both.xml ../qemuxml2argvdata/aarch64-gic-v3.xml
+tests/qemuxml2xmloutdata/aarch64-gic-none-v2.xml ../qemuxml2argvdata/aarch64-gic-v2.xml
+tests/qemuxml2xmloutdata/aarch64-gic-none-v3.xml ../qemuxml2argvdata/aarch64-gic-v3.xml
+tests/qemuxml2xmloutdata/aarch64-gic-none.xml ../qemuxml2argvdata/aarch64-gic-v2.xml
+tests/qemuxml2xmloutdata/aarch64-gic-v2.xml ../qemuxml2argvdata/aarch64-gic-v2.xml
+tests/qemuxml2xmloutdata/aarch64-gic-v3.xml ../qemuxml2argvdata/aarch64-gic-v3.xml
+tests/qemuxml2xmloutdata/blkdeviotune-group-num.xml ../qemuxml2argvdata/blkdeviotune-group-num.xml
+tests/qemuxml2xmloutdata/blkdeviotune-max-length.xml ../qemuxml2argvdata/blkdeviotune-max-length.xml
+tests/qemuxml2xmloutdata/blkdeviotune-max.xml ../qemuxml2argvdata/blkdeviotune-max.xml
+tests/qemuxml2xmloutdata/disk-drive-detect-zeroes.xml ../qemuxml2argvdata/disk-drive-detect-zeroes.xml
+tests/qemuxml2xmloutdata/disk-virtio-scsi-reservations.xml ../qemuxml2argvdata/disk-virtio-scsi-reservations.xml
+tests/qemuxml2xmloutdata/encrypted-disk-usage.xml ../qemuxml2argvdata/encrypted-disk-usage.xml
+tests/qemuxml2xmloutdata/hugepages-memaccess.xml ../qemuxml2argvdata/hugepages-memaccess.xml
+tests/qemuxml2xmloutdata/hugepages-memaccess2.xml ../qemuxml2argvdata/hugepages-memaccess2.xml
+tests/qemuxml2xmloutdata/hugepages-pages4.xml ../qemuxml2argvdata/hugepages-pages4.xml
+tests/qemuxml2xmloutdata/hugepages-pages5.xml ../qemuxml2argvdata/hugepages-pages5.xml
+tests/qemuxml2xmloutdata/hugepages-pages6.xml ../qemuxml2argvdata/hugepages-pages6.xml
+tests/qemuxml2xmloutdata/hugepages-pages7.xml ../qemuxml2argvdata/hugepages-pages7.xml
+tests/qemuxml2xmloutdata/intel-iommu-caching-mode.xml ../qemuxml2argvdata/intel-iommu-caching-mode.xml
+tests/qemuxml2xmloutdata/intel-iommu-device-iotlb.xml ../qemuxml2argvdata/intel-iommu-device-iotlb.xml
+tests/qemuxml2xmloutdata/intel-iommu-eim.xml ../qemuxml2argvdata/intel-iommu-eim.xml
+tests/qemuxml2xmloutdata/mach-virt-console-native.xml mach-virt-serial-compat.xml
+tests/qemuxml2xmloutdata/mach-virt-serial+console-native.xml mach-virt-serial-compat.xml
+tests/qemuxml2xmloutdata/mach-virt-serial-native.xml mach-virt-serial-compat.xml
+tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-access.xml ../qemuxml2argvdata/memory-hotplug-nvdimm-access.xml
+tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-label.xml ../qemuxml2argvdata/memory-hotplug-nvdimm-label.xml
+tests/qemuxml2xmloutdata/memory-hotplug-nvdimm.xml ../qemuxml2argvdata/memory-hotplug-nvdimm.xml
+tests/qemuxml2xmloutdata/net-user-addr.xml ../qemuxml2argvdata/net-user-addr.xml
+tests/qemuxml2xmloutdata/pseries-console-native.xml pseries-serial-native.xml
+tests/qemuxml2xmloutdata/pseries-serial+console-native.xml pseries-serial-native.xml
+tests/qemuxml2xmloutdata/pseries-serial-compat.xml pseries-serial-native.xml
+tests/qemuxml2xmloutdata/serial-tcp-tlsx509-chardev-notls.xml ../qemuxml2argvdata/serial-tcp-tlsx509-chardev-notls.xml
+tests/qemuxml2xmloutdata/user-aliases.xml ../qemuxml2argvdata/user-aliases.xml
+tests/qemuxml2xmloutdata/vhost-vsock.xml ../qemuxml2argvdata/vhost-vsock.xml
+tests/qemuxml2xmloutdata/virtio-options.xml ../qemuxml2argvdata/virtio-options.xml
+tests/vircaps2xmldata/linux-basic/node/node0/cpu0 ../../cpu/cpu0
+tests/vircaps2xmldata/linux-basic/node/node0/cpu1 ../../cpu/cpu1
+tests/vircaps2xmldata/linux-basic/node/node0/cpu2 ../../cpu/cpu2
+tests/vircaps2xmldata/linux-basic/node/node0/cpu3 ../../cpu/cpu3
+tests/vircaps2xmldata/linux-basic/node/node1/cpu4 ../../cpu/cpu4
+tests/vircaps2xmldata/linux-basic/node/node1/cpu5 ../../cpu/cpu5
+tests/vircaps2xmldata/linux-basic/node/node1/cpu6 ../../cpu/cpu6
+tests/vircaps2xmldata/linux-basic/node/node1/cpu7 ../../cpu/cpu7
+tests/vircaps2xmldata/linux-basic/node/node2/cpu10 ../../cpu/cpu10
+tests/vircaps2xmldata/linux-basic/node/node2/cpu11 ../../cpu/cpu11
+tests/vircaps2xmldata/linux-basic/node/node2/cpu8 ../../cpu/cpu8
+tests/vircaps2xmldata/linux-basic/node/node2/cpu9 ../../cpu/cpu9
+tests/vircaps2xmldata/linux-basic/node/node3/cpu12 ../../cpu/cpu12
+tests/vircaps2xmldata/linux-basic/node/node3/cpu13 ../../cpu/cpu13
+tests/vircaps2xmldata/linux-basic/node/node3/cpu14 ../../cpu/cpu14
+tests/vircaps2xmldata/linux-basic/node/node3/cpu15 ../../cpu/cpu15
+tests/vircaps2xmldata/linux-caches/system/node/node0/cpu0 ../../cpu/cpu0
+tests/vircaps2xmldata/linux-caches/system/node/node0/cpu1 ../../cpu/cpu1
+tests/vircaps2xmldata/linux-caches/system/node/node0/cpu2 ../../cpu/cpu2
+tests/vircaps2xmldata/linux-caches/system/node/node0/cpu3 ../../cpu/cpu3
+tests/vircaps2xmldata/linux-caches/system/node/node0/cpu4 ../../cpu/cpu4
+tests/vircaps2xmldata/linux-caches/system/node/node0/cpu5 ../../cpu/cpu5
+tests/vircaps2xmldata/linux-caches/system/node/node0/cpu6 ../../cpu/cpu6
+tests/vircaps2xmldata/linux-caches/system/node/node0/cpu7 ../../cpu/cpu7
+tests/vircaps2xmldata/linux-resctrl-cdp/system ../linux-resctrl/system/
+tests/vircaps2xmldata/linux-resctrl-skx-twocaches/system/node/node0/cpu0 ../../cpu/cpu0
+tests/vircaps2xmldata/linux-resctrl-skx/system/node/node0/cpu0 ../../cpu/cpu0
+tests/vircaps2xmldata/linux-resctrl/system/node/node0/cpu0 ../../cpu/cpu0
+tests/vircaps2xmldata/linux-resctrl/system/node/node0/cpu1 ../../cpu/cpu1
+tests/vircaps2xmldata/linux-resctrl/system/node/node0/cpu2 ../../cpu/cpu2
+tests/vircaps2xmldata/linux-resctrl/system/node/node0/cpu3 ../../cpu/cpu3
+tests/vircaps2xmldata/linux-resctrl/system/node/node0/cpu4 ../../cpu/cpu4
+tests/vircaps2xmldata/linux-resctrl/system/node/node0/cpu5 ../../cpu/cpu5
+tests/vircaps2xmldata/linux-resctrl/system/node/node1/cpu10 ../../cpu/cpu10
+tests/vircaps2xmldata/linux-resctrl/system/node/node1/cpu11 ../../cpu/cpu11
+tests/vircaps2xmldata/linux-resctrl/system/node/node1/cpu6 ../../cpu/cpu6
+tests/vircaps2xmldata/linux-resctrl/system/node/node1/cpu7 ../../cpu/cpu7
+tests/vircaps2xmldata/linux-resctrl/system/node/node1/cpu8 ../../cpu/cpu8
+tests/vircaps2xmldata/linux-resctrl/system/node/node1/cpu9 ../../cpu/cpu9
+tests/virfilecachedata/9ca150bf3119b75dcac8e8bae4bc3a28e75bc3e262757001e8b953580f5e75ef.cache 5f3154560c130108b282a2aa15b1658aa16923e46497dd8deeb6be287ddb0ca0.cache
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu10 ../../cpu/cpu10
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu100 ../../cpu/cpu100
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu101 ../../cpu/cpu101
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu102 ../../cpu/cpu102
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu103 ../../cpu/cpu103
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu11 ../../cpu/cpu11
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu12 ../../cpu/cpu12
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu13 ../../cpu/cpu13
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu14 ../../cpu/cpu14
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu144 ../../cpu/cpu144
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu145 ../../cpu/cpu145
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu146 ../../cpu/cpu146
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu147 ../../cpu/cpu147
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu148 ../../cpu/cpu148
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu149 ../../cpu/cpu149
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu15 ../../cpu/cpu15
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu150 ../../cpu/cpu150
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu151 ../../cpu/cpu151
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu152 ../../cpu/cpu152
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu153 ../../cpu/cpu153
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu154 ../../cpu/cpu154
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu155 ../../cpu/cpu155
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu156 ../../cpu/cpu156
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu157 ../../cpu/cpu157
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu158 ../../cpu/cpu158
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu159 ../../cpu/cpu159
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu16 ../../cpu/cpu16
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu17 ../../cpu/cpu17
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu18 ../../cpu/cpu18
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu19 ../../cpu/cpu19
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu20 ../../cpu/cpu20
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu21 ../../cpu/cpu21
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu22 ../../cpu/cpu22
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu23 ../../cpu/cpu23
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu24 ../../cpu/cpu24
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu25 ../../cpu/cpu25
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu26 ../../cpu/cpu26
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu27 ../../cpu/cpu27
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu28 ../../cpu/cpu28
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu29 ../../cpu/cpu29
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu30 ../../cpu/cpu30
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu31 ../../cpu/cpu31
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu32 ../../cpu/cpu32
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu33 ../../cpu/cpu33
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu34 ../../cpu/cpu34
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu35 ../../cpu/cpu35
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu36 ../../cpu/cpu36
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu37 ../../cpu/cpu37
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu38 ../../cpu/cpu38
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu39 ../../cpu/cpu39
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu56 ../../cpu/cpu56
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu57 ../../cpu/cpu57
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu58 ../../cpu/cpu58
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu59 ../../cpu/cpu59
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu60 ../../cpu/cpu60
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu61 ../../cpu/cpu61
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu62 ../../cpu/cpu62
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu63 ../../cpu/cpu63
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu64 ../../cpu/cpu64
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu65 ../../cpu/cpu65
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu66 ../../cpu/cpu66
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu67 ../../cpu/cpu67
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu68 ../../cpu/cpu68
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu69 ../../cpu/cpu69
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu7 ../../cpu/cpu7
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu70 ../../cpu/cpu70
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu71 ../../cpu/cpu71
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu8 ../../cpu/cpu8
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu80 ../../cpu/cpu80
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu81 ../../cpu/cpu81
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu82 ../../cpu/cpu82
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu83 ../../cpu/cpu83
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu84 ../../cpu/cpu84
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu85 ../../cpu/cpu85
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu86 ../../cpu/cpu86
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu87 ../../cpu/cpu87
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu88 ../../cpu/cpu88
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu89 ../../cpu/cpu89
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu9 ../../cpu/cpu9
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu90 ../../cpu/cpu90
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu91 ../../cpu/cpu91
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu92 ../../cpu/cpu92
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu93 ../../cpu/cpu93
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu94 ../../cpu/cpu94
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu95 ../../cpu/cpu95
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu96 ../../cpu/cpu96
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu97 ../../cpu/cpu97
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu98 ../../cpu/cpu98
+tests/virhostcpudata/linux-deconf-cpus/node/node0/cpu99 ../../cpu/cpu99
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu40 ../../cpu/cpu40
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu41 ../../cpu/cpu41
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu42 ../../cpu/cpu42
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu43 ../../cpu/cpu43
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu44 ../../cpu/cpu44
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu45 ../../cpu/cpu45
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu46 ../../cpu/cpu46
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu47 ../../cpu/cpu47
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu48 ../../cpu/cpu48
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu49 ../../cpu/cpu49
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu50 ../../cpu/cpu50
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu51 ../../cpu/cpu51
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu52 ../../cpu/cpu52
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu53 ../../cpu/cpu53
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu54 ../../cpu/cpu54
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu55 ../../cpu/cpu55
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu72 ../../cpu/cpu72
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu73 ../../cpu/cpu73
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu74 ../../cpu/cpu74
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu75 ../../cpu/cpu75
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu76 ../../cpu/cpu76
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu77 ../../cpu/cpu77
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu78 ../../cpu/cpu78
+tests/virhostcpudata/linux-deconf-cpus/node/node1/cpu79 ../../cpu/cpu79
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu104 ../../cpu/cpu104
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu105 ../../cpu/cpu105
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu106 ../../cpu/cpu106
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu107 ../../cpu/cpu107
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu108 ../../cpu/cpu108
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu109 ../../cpu/cpu109
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu110 ../../cpu/cpu110
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu111 ../../cpu/cpu111
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu112 ../../cpu/cpu112
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu113 ../../cpu/cpu113
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu114 ../../cpu/cpu114
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu115 ../../cpu/cpu115
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu116 ../../cpu/cpu116
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu117 ../../cpu/cpu117
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu118 ../../cpu/cpu118
+tests/virhostcpudata/linux-deconf-cpus/node/node16/cpu119 ../../cpu/cpu119
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu120 ../../cpu/cpu120
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu121 ../../cpu/cpu121
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu122 ../../cpu/cpu122
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu123 ../../cpu/cpu123
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu124 ../../cpu/cpu124
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu125 ../../cpu/cpu125
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu126 ../../cpu/cpu126
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu127 ../../cpu/cpu127
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu128 ../../cpu/cpu128
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu129 ../../cpu/cpu129
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu130 ../../cpu/cpu130
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu131 ../../cpu/cpu131
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu132 ../../cpu/cpu132
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu133 ../../cpu/cpu133
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu134 ../../cpu/cpu134
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu135 ../../cpu/cpu135
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu136 ../../cpu/cpu136
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu137 ../../cpu/cpu137
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu138 ../../cpu/cpu138
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu139 ../../cpu/cpu139
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu140 ../../cpu/cpu140
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu141 ../../cpu/cpu141
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu142 ../../cpu/cpu142
+tests/virhostcpudata/linux-deconf-cpus/node/node17/cpu143 ../../cpu/cpu143
+tests/virhostcpudata/linux-rhel74-moonshot/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-rhel74-moonshot/node/node0/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-rhel74-moonshot/node/node0/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-rhel74-moonshot/node/node0/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-rhel74-moonshot/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-rhel74-moonshot/node/node0/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-rhel74-moonshot/node/node0/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-rhel74-moonshot/node/node0/cpu7 ../../cpu/cpu7
+tests/virhostcpudata/linux-subcores1/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-subcores1/node/node0/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-subcores1/node/node0/cpu10 ../../cpu/cpu10
+tests/virhostcpudata/linux-subcores1/node/node0/cpu11 ../../cpu/cpu11
+tests/virhostcpudata/linux-subcores1/node/node0/cpu12 ../../cpu/cpu12
+tests/virhostcpudata/linux-subcores1/node/node0/cpu13 ../../cpu/cpu13
+tests/virhostcpudata/linux-subcores1/node/node0/cpu14 ../../cpu/cpu14
+tests/virhostcpudata/linux-subcores1/node/node0/cpu15 ../../cpu/cpu15
+tests/virhostcpudata/linux-subcores1/node/node0/cpu16 ../../cpu/cpu16
+tests/virhostcpudata/linux-subcores1/node/node0/cpu17 ../../cpu/cpu17
+tests/virhostcpudata/linux-subcores1/node/node0/cpu18 ../../cpu/cpu18
+tests/virhostcpudata/linux-subcores1/node/node0/cpu19 ../../cpu/cpu19
+tests/virhostcpudata/linux-subcores1/node/node0/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-subcores1/node/node0/cpu20 ../../cpu/cpu20
+tests/virhostcpudata/linux-subcores1/node/node0/cpu21 ../../cpu/cpu21
+tests/virhostcpudata/linux-subcores1/node/node0/cpu22 ../../cpu/cpu22
+tests/virhostcpudata/linux-subcores1/node/node0/cpu23 ../../cpu/cpu23
+tests/virhostcpudata/linux-subcores1/node/node0/cpu24 ../../cpu/cpu24
+tests/virhostcpudata/linux-subcores1/node/node0/cpu25 ../../cpu/cpu25
+tests/virhostcpudata/linux-subcores1/node/node0/cpu26 ../../cpu/cpu26
+tests/virhostcpudata/linux-subcores1/node/node0/cpu27 ../../cpu/cpu27
+tests/virhostcpudata/linux-subcores1/node/node0/cpu28 ../../cpu/cpu28
+tests/virhostcpudata/linux-subcores1/node/node0/cpu29 ../../cpu/cpu29
+tests/virhostcpudata/linux-subcores1/node/node0/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-subcores1/node/node0/cpu30 ../../cpu/cpu30
+tests/virhostcpudata/linux-subcores1/node/node0/cpu31 ../../cpu/cpu31
+tests/virhostcpudata/linux-subcores1/node/node0/cpu32 ../../cpu/cpu32
+tests/virhostcpudata/linux-subcores1/node/node0/cpu33 ../../cpu/cpu33
+tests/virhostcpudata/linux-subcores1/node/node0/cpu34 ../../cpu/cpu34
+tests/virhostcpudata/linux-subcores1/node/node0/cpu35 ../../cpu/cpu35
+tests/virhostcpudata/linux-subcores1/node/node0/cpu36 ../../cpu/cpu36
+tests/virhostcpudata/linux-subcores1/node/node0/cpu37 ../../cpu/cpu37
+tests/virhostcpudata/linux-subcores1/node/node0/cpu38 ../../cpu/cpu38
+tests/virhostcpudata/linux-subcores1/node/node0/cpu39 ../../cpu/cpu39
+tests/virhostcpudata/linux-subcores1/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-subcores1/node/node0/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-subcores1/node/node0/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-subcores1/node/node0/cpu7 ../../cpu/cpu7
+tests/virhostcpudata/linux-subcores1/node/node0/cpu8 ../../cpu/cpu8
+tests/virhostcpudata/linux-subcores1/node/node0/cpu9 ../../cpu/cpu9
+tests/virhostcpudata/linux-subcores1/node/node1/cpu40 ../../cpu/cpu40
+tests/virhostcpudata/linux-subcores1/node/node1/cpu41 ../../cpu/cpu41
+tests/virhostcpudata/linux-subcores1/node/node1/cpu42 ../../cpu/cpu42
+tests/virhostcpudata/linux-subcores1/node/node1/cpu43 ../../cpu/cpu43
+tests/virhostcpudata/linux-subcores1/node/node1/cpu44 ../../cpu/cpu44
+tests/virhostcpudata/linux-subcores1/node/node1/cpu45 ../../cpu/cpu45
+tests/virhostcpudata/linux-subcores1/node/node1/cpu46 ../../cpu/cpu46
+tests/virhostcpudata/linux-subcores1/node/node1/cpu47 ../../cpu/cpu47
+tests/virhostcpudata/linux-subcores1/node/node1/cpu48 ../../cpu/cpu48
+tests/virhostcpudata/linux-subcores1/node/node1/cpu49 ../../cpu/cpu49
+tests/virhostcpudata/linux-subcores1/node/node1/cpu50 ../../cpu/cpu50
+tests/virhostcpudata/linux-subcores1/node/node1/cpu51 ../../cpu/cpu51
+tests/virhostcpudata/linux-subcores1/node/node1/cpu52 ../../cpu/cpu52
+tests/virhostcpudata/linux-subcores1/node/node1/cpu53 ../../cpu/cpu53
+tests/virhostcpudata/linux-subcores1/node/node1/cpu54 ../../cpu/cpu54
+tests/virhostcpudata/linux-subcores1/node/node1/cpu55 ../../cpu/cpu55
+tests/virhostcpudata/linux-subcores1/node/node1/cpu56 ../../cpu/cpu56
+tests/virhostcpudata/linux-subcores1/node/node1/cpu57 ../../cpu/cpu57
+tests/virhostcpudata/linux-subcores1/node/node1/cpu58 ../../cpu/cpu58
+tests/virhostcpudata/linux-subcores1/node/node1/cpu59 ../../cpu/cpu59
+tests/virhostcpudata/linux-subcores1/node/node1/cpu60 ../../cpu/cpu60
+tests/virhostcpudata/linux-subcores1/node/node1/cpu61 ../../cpu/cpu61
+tests/virhostcpudata/linux-subcores1/node/node1/cpu62 ../../cpu/cpu62
+tests/virhostcpudata/linux-subcores1/node/node1/cpu63 ../../cpu/cpu63
+tests/virhostcpudata/linux-subcores1/node/node1/cpu64 ../../cpu/cpu64
+tests/virhostcpudata/linux-subcores1/node/node1/cpu65 ../../cpu/cpu65
+tests/virhostcpudata/linux-subcores1/node/node1/cpu66 ../../cpu/cpu66
+tests/virhostcpudata/linux-subcores1/node/node1/cpu67 ../../cpu/cpu67
+tests/virhostcpudata/linux-subcores1/node/node1/cpu68 ../../cpu/cpu68
+tests/virhostcpudata/linux-subcores1/node/node1/cpu69 ../../cpu/cpu69
+tests/virhostcpudata/linux-subcores1/node/node1/cpu70 ../../cpu/cpu70
+tests/virhostcpudata/linux-subcores1/node/node1/cpu71 ../../cpu/cpu71
+tests/virhostcpudata/linux-subcores1/node/node1/cpu72 ../../cpu/cpu72
+tests/virhostcpudata/linux-subcores1/node/node1/cpu73 ../../cpu/cpu73
+tests/virhostcpudata/linux-subcores1/node/node1/cpu74 ../../cpu/cpu74
+tests/virhostcpudata/linux-subcores1/node/node1/cpu75 ../../cpu/cpu75
+tests/virhostcpudata/linux-subcores1/node/node1/cpu76 ../../cpu/cpu76
+tests/virhostcpudata/linux-subcores1/node/node1/cpu77 ../../cpu/cpu77
+tests/virhostcpudata/linux-subcores1/node/node1/cpu78 ../../cpu/cpu78
+tests/virhostcpudata/linux-subcores1/node/node1/cpu79 ../../cpu/cpu79
+tests/virhostcpudata/linux-subcores1/node/node16/cpu100 ../../cpu/cpu100
+tests/virhostcpudata/linux-subcores1/node/node16/cpu101 ../../cpu/cpu101
+tests/virhostcpudata/linux-subcores1/node/node16/cpu102 ../../cpu/cpu102
+tests/virhostcpudata/linux-subcores1/node/node16/cpu103 ../../cpu/cpu103
+tests/virhostcpudata/linux-subcores1/node/node16/cpu104 ../../cpu/cpu104
+tests/virhostcpudata/linux-subcores1/node/node16/cpu105 ../../cpu/cpu105
+tests/virhostcpudata/linux-subcores1/node/node16/cpu106 ../../cpu/cpu106
+tests/virhostcpudata/linux-subcores1/node/node16/cpu107 ../../cpu/cpu107
+tests/virhostcpudata/linux-subcores1/node/node16/cpu108 ../../cpu/cpu108
+tests/virhostcpudata/linux-subcores1/node/node16/cpu109 ../../cpu/cpu109
+tests/virhostcpudata/linux-subcores1/node/node16/cpu110 ../../cpu/cpu110
+tests/virhostcpudata/linux-subcores1/node/node16/cpu111 ../../cpu/cpu111
+tests/virhostcpudata/linux-subcores1/node/node16/cpu112 ../../cpu/cpu112
+tests/virhostcpudata/linux-subcores1/node/node16/cpu113 ../../cpu/cpu113
+tests/virhostcpudata/linux-subcores1/node/node16/cpu114 ../../cpu/cpu114
+tests/virhostcpudata/linux-subcores1/node/node16/cpu115 ../../cpu/cpu115
+tests/virhostcpudata/linux-subcores1/node/node16/cpu116 ../../cpu/cpu116
+tests/virhostcpudata/linux-subcores1/node/node16/cpu117 ../../cpu/cpu117
+tests/virhostcpudata/linux-subcores1/node/node16/cpu118 ../../cpu/cpu118
+tests/virhostcpudata/linux-subcores1/node/node16/cpu119 ../../cpu/cpu119
+tests/virhostcpudata/linux-subcores1/node/node16/cpu80 ../../cpu/cpu80
+tests/virhostcpudata/linux-subcores1/node/node16/cpu81 ../../cpu/cpu81
+tests/virhostcpudata/linux-subcores1/node/node16/cpu82 ../../cpu/cpu82
+tests/virhostcpudata/linux-subcores1/node/node16/cpu83 ../../cpu/cpu83
+tests/virhostcpudata/linux-subcores1/node/node16/cpu84 ../../cpu/cpu84
+tests/virhostcpudata/linux-subcores1/node/node16/cpu85 ../../cpu/cpu85
+tests/virhostcpudata/linux-subcores1/node/node16/cpu86 ../../cpu/cpu86
+tests/virhostcpudata/linux-subcores1/node/node16/cpu87 ../../cpu/cpu87
+tests/virhostcpudata/linux-subcores1/node/node16/cpu88 ../../cpu/cpu88
+tests/virhostcpudata/linux-subcores1/node/node16/cpu89 ../../cpu/cpu89
+tests/virhostcpudata/linux-subcores1/node/node16/cpu90 ../../cpu/cpu90
+tests/virhostcpudata/linux-subcores1/node/node16/cpu91 ../../cpu/cpu91
+tests/virhostcpudata/linux-subcores1/node/node16/cpu92 ../../cpu/cpu92
+tests/virhostcpudata/linux-subcores1/node/node16/cpu93 ../../cpu/cpu93
+tests/virhostcpudata/linux-subcores1/node/node16/cpu94 ../../cpu/cpu94
+tests/virhostcpudata/linux-subcores1/node/node16/cpu95 ../../cpu/cpu95
+tests/virhostcpudata/linux-subcores1/node/node16/cpu96 ../../cpu/cpu96
+tests/virhostcpudata/linux-subcores1/node/node16/cpu97 ../../cpu/cpu97
+tests/virhostcpudata/linux-subcores1/node/node16/cpu98 ../../cpu/cpu98
+tests/virhostcpudata/linux-subcores1/node/node16/cpu99 ../../cpu/cpu99
+tests/virhostcpudata/linux-subcores1/node/node17/cpu120 ../../cpu/cpu120
+tests/virhostcpudata/linux-subcores1/node/node17/cpu121 ../../cpu/cpu121
+tests/virhostcpudata/linux-subcores1/node/node17/cpu122 ../../cpu/cpu122
+tests/virhostcpudata/linux-subcores1/node/node17/cpu123 ../../cpu/cpu123
+tests/virhostcpudata/linux-subcores1/node/node17/cpu124 ../../cpu/cpu124
+tests/virhostcpudata/linux-subcores1/node/node17/cpu125 ../../cpu/cpu125
+tests/virhostcpudata/linux-subcores1/node/node17/cpu126 ../../cpu/cpu126
+tests/virhostcpudata/linux-subcores1/node/node17/cpu127 ../../cpu/cpu127
+tests/virhostcpudata/linux-subcores1/node/node17/cpu128 ../../cpu/cpu128
+tests/virhostcpudata/linux-subcores1/node/node17/cpu129 ../../cpu/cpu129
+tests/virhostcpudata/linux-subcores1/node/node17/cpu130 ../../cpu/cpu130
+tests/virhostcpudata/linux-subcores1/node/node17/cpu131 ../../cpu/cpu131
+tests/virhostcpudata/linux-subcores1/node/node17/cpu132 ../../cpu/cpu132
+tests/virhostcpudata/linux-subcores1/node/node17/cpu133 ../../cpu/cpu133
+tests/virhostcpudata/linux-subcores1/node/node17/cpu134 ../../cpu/cpu134
+tests/virhostcpudata/linux-subcores1/node/node17/cpu135 ../../cpu/cpu135
+tests/virhostcpudata/linux-subcores1/node/node17/cpu136 ../../cpu/cpu136
+tests/virhostcpudata/linux-subcores1/node/node17/cpu137 ../../cpu/cpu137
+tests/virhostcpudata/linux-subcores1/node/node17/cpu138 ../../cpu/cpu138
+tests/virhostcpudata/linux-subcores1/node/node17/cpu139 ../../cpu/cpu139
+tests/virhostcpudata/linux-subcores1/node/node17/cpu140 ../../cpu/cpu140
+tests/virhostcpudata/linux-subcores1/node/node17/cpu141 ../../cpu/cpu141
+tests/virhostcpudata/linux-subcores1/node/node17/cpu142 ../../cpu/cpu142
+tests/virhostcpudata/linux-subcores1/node/node17/cpu143 ../../cpu/cpu143
+tests/virhostcpudata/linux-subcores1/node/node17/cpu144 ../../cpu/cpu144
+tests/virhostcpudata/linux-subcores1/node/node17/cpu145 ../../cpu/cpu145
+tests/virhostcpudata/linux-subcores1/node/node17/cpu146 ../../cpu/cpu146
+tests/virhostcpudata/linux-subcores1/node/node17/cpu147 ../../cpu/cpu147
+tests/virhostcpudata/linux-subcores1/node/node17/cpu148 ../../cpu/cpu148
+tests/virhostcpudata/linux-subcores1/node/node17/cpu149 ../../cpu/cpu149
+tests/virhostcpudata/linux-subcores1/node/node17/cpu150 ../../cpu/cpu150
+tests/virhostcpudata/linux-subcores1/node/node17/cpu151 ../../cpu/cpu151
+tests/virhostcpudata/linux-subcores1/node/node17/cpu152 ../../cpu/cpu152
+tests/virhostcpudata/linux-subcores1/node/node17/cpu153 ../../cpu/cpu153
+tests/virhostcpudata/linux-subcores1/node/node17/cpu154 ../../cpu/cpu154
+tests/virhostcpudata/linux-subcores1/node/node17/cpu155 ../../cpu/cpu155
+tests/virhostcpudata/linux-subcores1/node/node17/cpu156 ../../cpu/cpu156
+tests/virhostcpudata/linux-subcores1/node/node17/cpu157 ../../cpu/cpu157
+tests/virhostcpudata/linux-subcores1/node/node17/cpu158 ../../cpu/cpu158
+tests/virhostcpudata/linux-subcores1/node/node17/cpu159 ../../cpu/cpu159
+tests/virhostcpudata/linux-subcores2/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-subcores2/node/node0/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-subcores2/node/node0/cpu10 ../../cpu/cpu10
+tests/virhostcpudata/linux-subcores2/node/node0/cpu11 ../../cpu/cpu11
+tests/virhostcpudata/linux-subcores2/node/node0/cpu12 ../../cpu/cpu12
+tests/virhostcpudata/linux-subcores2/node/node0/cpu13 ../../cpu/cpu13
+tests/virhostcpudata/linux-subcores2/node/node0/cpu14 ../../cpu/cpu14
+tests/virhostcpudata/linux-subcores2/node/node0/cpu15 ../../cpu/cpu15
+tests/virhostcpudata/linux-subcores2/node/node0/cpu16 ../../cpu/cpu16
+tests/virhostcpudata/linux-subcores2/node/node0/cpu17 ../../cpu/cpu17
+tests/virhostcpudata/linux-subcores2/node/node0/cpu18 ../../cpu/cpu18
+tests/virhostcpudata/linux-subcores2/node/node0/cpu19 ../../cpu/cpu19
+tests/virhostcpudata/linux-subcores2/node/node0/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-subcores2/node/node0/cpu20 ../../cpu/cpu20
+tests/virhostcpudata/linux-subcores2/node/node0/cpu21 ../../cpu/cpu21
+tests/virhostcpudata/linux-subcores2/node/node0/cpu22 ../../cpu/cpu22
+tests/virhostcpudata/linux-subcores2/node/node0/cpu23 ../../cpu/cpu23
+tests/virhostcpudata/linux-subcores2/node/node0/cpu24 ../../cpu/cpu24
+tests/virhostcpudata/linux-subcores2/node/node0/cpu25 ../../cpu/cpu25
+tests/virhostcpudata/linux-subcores2/node/node0/cpu26 ../../cpu/cpu26
+tests/virhostcpudata/linux-subcores2/node/node0/cpu27 ../../cpu/cpu27
+tests/virhostcpudata/linux-subcores2/node/node0/cpu28 ../../cpu/cpu28
+tests/virhostcpudata/linux-subcores2/node/node0/cpu29 ../../cpu/cpu29
+tests/virhostcpudata/linux-subcores2/node/node0/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-subcores2/node/node0/cpu30 ../../cpu/cpu30
+tests/virhostcpudata/linux-subcores2/node/node0/cpu31 ../../cpu/cpu31
+tests/virhostcpudata/linux-subcores2/node/node0/cpu32 ../../cpu/cpu32
+tests/virhostcpudata/linux-subcores2/node/node0/cpu33 ../../cpu/cpu33
+tests/virhostcpudata/linux-subcores2/node/node0/cpu34 ../../cpu/cpu34
+tests/virhostcpudata/linux-subcores2/node/node0/cpu35 ../../cpu/cpu35
+tests/virhostcpudata/linux-subcores2/node/node0/cpu36 ../../cpu/cpu36
+tests/virhostcpudata/linux-subcores2/node/node0/cpu37 ../../cpu/cpu37
+tests/virhostcpudata/linux-subcores2/node/node0/cpu38 ../../cpu/cpu38
+tests/virhostcpudata/linux-subcores2/node/node0/cpu39 ../../cpu/cpu39
+tests/virhostcpudata/linux-subcores2/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-subcores2/node/node0/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-subcores2/node/node0/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-subcores2/node/node0/cpu7 ../../cpu/cpu7
+tests/virhostcpudata/linux-subcores2/node/node0/cpu8 ../../cpu/cpu8
+tests/virhostcpudata/linux-subcores2/node/node0/cpu9 ../../cpu/cpu9
+tests/virhostcpudata/linux-subcores2/node/node1/cpu40 ../../cpu/cpu40
+tests/virhostcpudata/linux-subcores2/node/node1/cpu41 ../../cpu/cpu41
+tests/virhostcpudata/linux-subcores2/node/node1/cpu42 ../../cpu/cpu42
+tests/virhostcpudata/linux-subcores2/node/node1/cpu43 ../../cpu/cpu43
+tests/virhostcpudata/linux-subcores2/node/node1/cpu44 ../../cpu/cpu44
+tests/virhostcpudata/linux-subcores2/node/node1/cpu45 ../../cpu/cpu45
+tests/virhostcpudata/linux-subcores2/node/node1/cpu46 ../../cpu/cpu46
+tests/virhostcpudata/linux-subcores2/node/node1/cpu47 ../../cpu/cpu47
+tests/virhostcpudata/linux-subcores2/node/node1/cpu48 ../../cpu/cpu48
+tests/virhostcpudata/linux-subcores2/node/node1/cpu49 ../../cpu/cpu49
+tests/virhostcpudata/linux-subcores2/node/node1/cpu50 ../../cpu/cpu50
+tests/virhostcpudata/linux-subcores2/node/node1/cpu51 ../../cpu/cpu51
+tests/virhostcpudata/linux-subcores2/node/node1/cpu52 ../../cpu/cpu52
+tests/virhostcpudata/linux-subcores2/node/node1/cpu53 ../../cpu/cpu53
+tests/virhostcpudata/linux-subcores2/node/node1/cpu54 ../../cpu/cpu54
+tests/virhostcpudata/linux-subcores2/node/node1/cpu55 ../../cpu/cpu55
+tests/virhostcpudata/linux-subcores2/node/node1/cpu56 ../../cpu/cpu56
+tests/virhostcpudata/linux-subcores2/node/node1/cpu57 ../../cpu/cpu57
+tests/virhostcpudata/linux-subcores2/node/node1/cpu58 ../../cpu/cpu58
+tests/virhostcpudata/linux-subcores2/node/node1/cpu59 ../../cpu/cpu59
+tests/virhostcpudata/linux-subcores2/node/node1/cpu60 ../../cpu/cpu60
+tests/virhostcpudata/linux-subcores2/node/node1/cpu61 ../../cpu/cpu61
+tests/virhostcpudata/linux-subcores2/node/node1/cpu62 ../../cpu/cpu62
+tests/virhostcpudata/linux-subcores2/node/node1/cpu63 ../../cpu/cpu63
+tests/virhostcpudata/linux-subcores2/node/node1/cpu64 ../../cpu/cpu64
+tests/virhostcpudata/linux-subcores2/node/node1/cpu65 ../../cpu/cpu65
+tests/virhostcpudata/linux-subcores2/node/node1/cpu66 ../../cpu/cpu66
+tests/virhostcpudata/linux-subcores2/node/node1/cpu67 ../../cpu/cpu67
+tests/virhostcpudata/linux-subcores2/node/node1/cpu68 ../../cpu/cpu68
+tests/virhostcpudata/linux-subcores2/node/node1/cpu69 ../../cpu/cpu69
+tests/virhostcpudata/linux-subcores2/node/node1/cpu70 ../../cpu/cpu70
+tests/virhostcpudata/linux-subcores2/node/node1/cpu71 ../../cpu/cpu71
+tests/virhostcpudata/linux-subcores2/node/node1/cpu72 ../../cpu/cpu72
+tests/virhostcpudata/linux-subcores2/node/node1/cpu73 ../../cpu/cpu73
+tests/virhostcpudata/linux-subcores2/node/node1/cpu74 ../../cpu/cpu74
+tests/virhostcpudata/linux-subcores2/node/node1/cpu75 ../../cpu/cpu75
+tests/virhostcpudata/linux-subcores2/node/node1/cpu76 ../../cpu/cpu76
+tests/virhostcpudata/linux-subcores2/node/node1/cpu77 ../../cpu/cpu77
+tests/virhostcpudata/linux-subcores2/node/node1/cpu78 ../../cpu/cpu78
+tests/virhostcpudata/linux-subcores2/node/node1/cpu79 ../../cpu/cpu79
+tests/virhostcpudata/linux-subcores2/node/node16/cpu100 ../../cpu/cpu100
+tests/virhostcpudata/linux-subcores2/node/node16/cpu101 ../../cpu/cpu101
+tests/virhostcpudata/linux-subcores2/node/node16/cpu102 ../../cpu/cpu102
+tests/virhostcpudata/linux-subcores2/node/node16/cpu103 ../../cpu/cpu103
+tests/virhostcpudata/linux-subcores2/node/node16/cpu104 ../../cpu/cpu104
+tests/virhostcpudata/linux-subcores2/node/node16/cpu105 ../../cpu/cpu105
+tests/virhostcpudata/linux-subcores2/node/node16/cpu106 ../../cpu/cpu106
+tests/virhostcpudata/linux-subcores2/node/node16/cpu107 ../../cpu/cpu107
+tests/virhostcpudata/linux-subcores2/node/node16/cpu108 ../../cpu/cpu108
+tests/virhostcpudata/linux-subcores2/node/node16/cpu109 ../../cpu/cpu109
+tests/virhostcpudata/linux-subcores2/node/node16/cpu110 ../../cpu/cpu110
+tests/virhostcpudata/linux-subcores2/node/node16/cpu111 ../../cpu/cpu111
+tests/virhostcpudata/linux-subcores2/node/node16/cpu112 ../../cpu/cpu112
+tests/virhostcpudata/linux-subcores2/node/node16/cpu113 ../../cpu/cpu113
+tests/virhostcpudata/linux-subcores2/node/node16/cpu114 ../../cpu/cpu114
+tests/virhostcpudata/linux-subcores2/node/node16/cpu115 ../../cpu/cpu115
+tests/virhostcpudata/linux-subcores2/node/node16/cpu116 ../../cpu/cpu116
+tests/virhostcpudata/linux-subcores2/node/node16/cpu117 ../../cpu/cpu117
+tests/virhostcpudata/linux-subcores2/node/node16/cpu118 ../../cpu/cpu118
+tests/virhostcpudata/linux-subcores2/node/node16/cpu119 ../../cpu/cpu119
+tests/virhostcpudata/linux-subcores2/node/node16/cpu80 ../../cpu/cpu80
+tests/virhostcpudata/linux-subcores2/node/node16/cpu81 ../../cpu/cpu81
+tests/virhostcpudata/linux-subcores2/node/node16/cpu82 ../../cpu/cpu82
+tests/virhostcpudata/linux-subcores2/node/node16/cpu83 ../../cpu/cpu83
+tests/virhostcpudata/linux-subcores2/node/node16/cpu84 ../../cpu/cpu84
+tests/virhostcpudata/linux-subcores2/node/node16/cpu85 ../../cpu/cpu85
+tests/virhostcpudata/linux-subcores2/node/node16/cpu86 ../../cpu/cpu86
+tests/virhostcpudata/linux-subcores2/node/node16/cpu87 ../../cpu/cpu87
+tests/virhostcpudata/linux-subcores2/node/node16/cpu88 ../../cpu/cpu88
+tests/virhostcpudata/linux-subcores2/node/node16/cpu89 ../../cpu/cpu89
+tests/virhostcpudata/linux-subcores2/node/node16/cpu90 ../../cpu/cpu90
+tests/virhostcpudata/linux-subcores2/node/node16/cpu91 ../../cpu/cpu91
+tests/virhostcpudata/linux-subcores2/node/node16/cpu92 ../../cpu/cpu92
+tests/virhostcpudata/linux-subcores2/node/node16/cpu93 ../../cpu/cpu93
+tests/virhostcpudata/linux-subcores2/node/node16/cpu94 ../../cpu/cpu94
+tests/virhostcpudata/linux-subcores2/node/node16/cpu95 ../../cpu/cpu95
+tests/virhostcpudata/linux-subcores2/node/node16/cpu96 ../../cpu/cpu96
+tests/virhostcpudata/linux-subcores2/node/node16/cpu97 ../../cpu/cpu97
+tests/virhostcpudata/linux-subcores2/node/node16/cpu98 ../../cpu/cpu98
+tests/virhostcpudata/linux-subcores2/node/node16/cpu99 ../../cpu/cpu99
+tests/virhostcpudata/linux-subcores2/node/node17/cpu120 ../../cpu/cpu120
+tests/virhostcpudata/linux-subcores2/node/node17/cpu121 ../../cpu/cpu121
+tests/virhostcpudata/linux-subcores2/node/node17/cpu122 ../../cpu/cpu122
+tests/virhostcpudata/linux-subcores2/node/node17/cpu123 ../../cpu/cpu123
+tests/virhostcpudata/linux-subcores2/node/node17/cpu124 ../../cpu/cpu124
+tests/virhostcpudata/linux-subcores2/node/node17/cpu125 ../../cpu/cpu125
+tests/virhostcpudata/linux-subcores2/node/node17/cpu126 ../../cpu/cpu126
+tests/virhostcpudata/linux-subcores2/node/node17/cpu127 ../../cpu/cpu127
+tests/virhostcpudata/linux-subcores2/node/node17/cpu128 ../../cpu/cpu128
+tests/virhostcpudata/linux-subcores2/node/node17/cpu129 ../../cpu/cpu129
+tests/virhostcpudata/linux-subcores2/node/node17/cpu130 ../../cpu/cpu130
+tests/virhostcpudata/linux-subcores2/node/node17/cpu131 ../../cpu/cpu131
+tests/virhostcpudata/linux-subcores2/node/node17/cpu132 ../../cpu/cpu132
+tests/virhostcpudata/linux-subcores2/node/node17/cpu133 ../../cpu/cpu133
+tests/virhostcpudata/linux-subcores2/node/node17/cpu134 ../../cpu/cpu134
+tests/virhostcpudata/linux-subcores2/node/node17/cpu135 ../../cpu/cpu135
+tests/virhostcpudata/linux-subcores2/node/node17/cpu136 ../../cpu/cpu136
+tests/virhostcpudata/linux-subcores2/node/node17/cpu137 ../../cpu/cpu137
+tests/virhostcpudata/linux-subcores2/node/node17/cpu138 ../../cpu/cpu138
+tests/virhostcpudata/linux-subcores2/node/node17/cpu139 ../../cpu/cpu139
+tests/virhostcpudata/linux-subcores2/node/node17/cpu140 ../../cpu/cpu140
+tests/virhostcpudata/linux-subcores2/node/node17/cpu141 ../../cpu/cpu141
+tests/virhostcpudata/linux-subcores2/node/node17/cpu142 ../../cpu/cpu142
+tests/virhostcpudata/linux-subcores2/node/node17/cpu143 ../../cpu/cpu143
+tests/virhostcpudata/linux-subcores2/node/node17/cpu144 ../../cpu/cpu144
+tests/virhostcpudata/linux-subcores2/node/node17/cpu145 ../../cpu/cpu145
+tests/virhostcpudata/linux-subcores2/node/node17/cpu146 ../../cpu/cpu146
+tests/virhostcpudata/linux-subcores2/node/node17/cpu147 ../../cpu/cpu147
+tests/virhostcpudata/linux-subcores2/node/node17/cpu148 ../../cpu/cpu148
+tests/virhostcpudata/linux-subcores2/node/node17/cpu149 ../../cpu/cpu149
+tests/virhostcpudata/linux-subcores2/node/node17/cpu150 ../../cpu/cpu150
+tests/virhostcpudata/linux-subcores2/node/node17/cpu151 ../../cpu/cpu151
+tests/virhostcpudata/linux-subcores2/node/node17/cpu152 ../../cpu/cpu152
+tests/virhostcpudata/linux-subcores2/node/node17/cpu153 ../../cpu/cpu153
+tests/virhostcpudata/linux-subcores2/node/node17/cpu154 ../../cpu/cpu154
+tests/virhostcpudata/linux-subcores2/node/node17/cpu155 ../../cpu/cpu155
+tests/virhostcpudata/linux-subcores2/node/node17/cpu156 ../../cpu/cpu156
+tests/virhostcpudata/linux-subcores2/node/node17/cpu157 ../../cpu/cpu157
+tests/virhostcpudata/linux-subcores2/node/node17/cpu158 ../../cpu/cpu158
+tests/virhostcpudata/linux-subcores2/node/node17/cpu159 ../../cpu/cpu159
+tests/virhostcpudata/linux-subcores3/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-subcores3/node/node0/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-subcores3/node/node0/cpu10 ../../cpu/cpu10
+tests/virhostcpudata/linux-subcores3/node/node0/cpu11 ../../cpu/cpu11
+tests/virhostcpudata/linux-subcores3/node/node0/cpu12 ../../cpu/cpu12
+tests/virhostcpudata/linux-subcores3/node/node0/cpu13 ../../cpu/cpu13
+tests/virhostcpudata/linux-subcores3/node/node0/cpu14 ../../cpu/cpu14
+tests/virhostcpudata/linux-subcores3/node/node0/cpu15 ../../cpu/cpu15
+tests/virhostcpudata/linux-subcores3/node/node0/cpu16 ../../cpu/cpu16
+tests/virhostcpudata/linux-subcores3/node/node0/cpu17 ../../cpu/cpu17
+tests/virhostcpudata/linux-subcores3/node/node0/cpu18 ../../cpu/cpu18
+tests/virhostcpudata/linux-subcores3/node/node0/cpu19 ../../cpu/cpu19
+tests/virhostcpudata/linux-subcores3/node/node0/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-subcores3/node/node0/cpu20 ../../cpu/cpu20
+tests/virhostcpudata/linux-subcores3/node/node0/cpu21 ../../cpu/cpu21
+tests/virhostcpudata/linux-subcores3/node/node0/cpu22 ../../cpu/cpu22
+tests/virhostcpudata/linux-subcores3/node/node0/cpu23 ../../cpu/cpu23
+tests/virhostcpudata/linux-subcores3/node/node0/cpu24 ../../cpu/cpu24
+tests/virhostcpudata/linux-subcores3/node/node0/cpu25 ../../cpu/cpu25
+tests/virhostcpudata/linux-subcores3/node/node0/cpu26 ../../cpu/cpu26
+tests/virhostcpudata/linux-subcores3/node/node0/cpu27 ../../cpu/cpu27
+tests/virhostcpudata/linux-subcores3/node/node0/cpu28 ../../cpu/cpu28
+tests/virhostcpudata/linux-subcores3/node/node0/cpu29 ../../cpu/cpu29
+tests/virhostcpudata/linux-subcores3/node/node0/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-subcores3/node/node0/cpu30 ../../cpu/cpu30
+tests/virhostcpudata/linux-subcores3/node/node0/cpu31 ../../cpu/cpu31
+tests/virhostcpudata/linux-subcores3/node/node0/cpu32 ../../cpu/cpu32
+tests/virhostcpudata/linux-subcores3/node/node0/cpu33 ../../cpu/cpu33
+tests/virhostcpudata/linux-subcores3/node/node0/cpu34 ../../cpu/cpu34
+tests/virhostcpudata/linux-subcores3/node/node0/cpu35 ../../cpu/cpu35
+tests/virhostcpudata/linux-subcores3/node/node0/cpu36 ../../cpu/cpu36
+tests/virhostcpudata/linux-subcores3/node/node0/cpu37 ../../cpu/cpu37
+tests/virhostcpudata/linux-subcores3/node/node0/cpu38 ../../cpu/cpu38
+tests/virhostcpudata/linux-subcores3/node/node0/cpu39 ../../cpu/cpu39
+tests/virhostcpudata/linux-subcores3/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-subcores3/node/node0/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-subcores3/node/node0/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-subcores3/node/node0/cpu7 ../../cpu/cpu7
+tests/virhostcpudata/linux-subcores3/node/node0/cpu8 ../../cpu/cpu8
+tests/virhostcpudata/linux-subcores3/node/node0/cpu9 ../../cpu/cpu9
+tests/virhostcpudata/linux-subcores3/node/node1/cpu40 ../../cpu/cpu40
+tests/virhostcpudata/linux-subcores3/node/node1/cpu41 ../../cpu/cpu41
+tests/virhostcpudata/linux-subcores3/node/node1/cpu42 ../../cpu/cpu42
+tests/virhostcpudata/linux-subcores3/node/node1/cpu43 ../../cpu/cpu43
+tests/virhostcpudata/linux-subcores3/node/node1/cpu44 ../../cpu/cpu44
+tests/virhostcpudata/linux-subcores3/node/node1/cpu45 ../../cpu/cpu45
+tests/virhostcpudata/linux-subcores3/node/node1/cpu46 ../../cpu/cpu46
+tests/virhostcpudata/linux-subcores3/node/node1/cpu47 ../../cpu/cpu47
+tests/virhostcpudata/linux-subcores3/node/node1/cpu48 ../../cpu/cpu48
+tests/virhostcpudata/linux-subcores3/node/node1/cpu49 ../../cpu/cpu49
+tests/virhostcpudata/linux-subcores3/node/node1/cpu50 ../../cpu/cpu50
+tests/virhostcpudata/linux-subcores3/node/node1/cpu51 ../../cpu/cpu51
+tests/virhostcpudata/linux-subcores3/node/node1/cpu52 ../../cpu/cpu52
+tests/virhostcpudata/linux-subcores3/node/node1/cpu53 ../../cpu/cpu53
+tests/virhostcpudata/linux-subcores3/node/node1/cpu54 ../../cpu/cpu54
+tests/virhostcpudata/linux-subcores3/node/node1/cpu55 ../../cpu/cpu55
+tests/virhostcpudata/linux-subcores3/node/node1/cpu56 ../../cpu/cpu56
+tests/virhostcpudata/linux-subcores3/node/node1/cpu57 ../../cpu/cpu57
+tests/virhostcpudata/linux-subcores3/node/node1/cpu58 ../../cpu/cpu58
+tests/virhostcpudata/linux-subcores3/node/node1/cpu59 ../../cpu/cpu59
+tests/virhostcpudata/linux-subcores3/node/node1/cpu60 ../../cpu/cpu60
+tests/virhostcpudata/linux-subcores3/node/node1/cpu61 ../../cpu/cpu61
+tests/virhostcpudata/linux-subcores3/node/node1/cpu62 ../../cpu/cpu62
+tests/virhostcpudata/linux-subcores3/node/node1/cpu63 ../../cpu/cpu63
+tests/virhostcpudata/linux-subcores3/node/node1/cpu64 ../../cpu/cpu64
+tests/virhostcpudata/linux-subcores3/node/node1/cpu65 ../../cpu/cpu65
+tests/virhostcpudata/linux-subcores3/node/node1/cpu66 ../../cpu/cpu66
+tests/virhostcpudata/linux-subcores3/node/node1/cpu67 ../../cpu/cpu67
+tests/virhostcpudata/linux-subcores3/node/node1/cpu68 ../../cpu/cpu68
+tests/virhostcpudata/linux-subcores3/node/node1/cpu69 ../../cpu/cpu69
+tests/virhostcpudata/linux-subcores3/node/node1/cpu70 ../../cpu/cpu70
+tests/virhostcpudata/linux-subcores3/node/node1/cpu71 ../../cpu/cpu71
+tests/virhostcpudata/linux-subcores3/node/node1/cpu72 ../../cpu/cpu72
+tests/virhostcpudata/linux-subcores3/node/node1/cpu73 ../../cpu/cpu73
+tests/virhostcpudata/linux-subcores3/node/node1/cpu74 ../../cpu/cpu74
+tests/virhostcpudata/linux-subcores3/node/node1/cpu75 ../../cpu/cpu75
+tests/virhostcpudata/linux-subcores3/node/node1/cpu76 ../../cpu/cpu76
+tests/virhostcpudata/linux-subcores3/node/node1/cpu77 ../../cpu/cpu77
+tests/virhostcpudata/linux-subcores3/node/node1/cpu78 ../../cpu/cpu78
+tests/virhostcpudata/linux-subcores3/node/node1/cpu79 ../../cpu/cpu79
+tests/virhostcpudata/linux-subcores3/node/node16/cpu100 ../../cpu/cpu100
+tests/virhostcpudata/linux-subcores3/node/node16/cpu101 ../../cpu/cpu101
+tests/virhostcpudata/linux-subcores3/node/node16/cpu102 ../../cpu/cpu102
+tests/virhostcpudata/linux-subcores3/node/node16/cpu103 ../../cpu/cpu103
+tests/virhostcpudata/linux-subcores3/node/node16/cpu104 ../../cpu/cpu104
+tests/virhostcpudata/linux-subcores3/node/node16/cpu105 ../../cpu/cpu105
+tests/virhostcpudata/linux-subcores3/node/node16/cpu106 ../../cpu/cpu106
+tests/virhostcpudata/linux-subcores3/node/node16/cpu107 ../../cpu/cpu107
+tests/virhostcpudata/linux-subcores3/node/node16/cpu108 ../../cpu/cpu108
+tests/virhostcpudata/linux-subcores3/node/node16/cpu109 ../../cpu/cpu109
+tests/virhostcpudata/linux-subcores3/node/node16/cpu110 ../../cpu/cpu110
+tests/virhostcpudata/linux-subcores3/node/node16/cpu111 ../../cpu/cpu111
+tests/virhostcpudata/linux-subcores3/node/node16/cpu112 ../../cpu/cpu112
+tests/virhostcpudata/linux-subcores3/node/node16/cpu113 ../../cpu/cpu113
+tests/virhostcpudata/linux-subcores3/node/node16/cpu114 ../../cpu/cpu114
+tests/virhostcpudata/linux-subcores3/node/node16/cpu115 ../../cpu/cpu115
+tests/virhostcpudata/linux-subcores3/node/node16/cpu116 ../../cpu/cpu116
+tests/virhostcpudata/linux-subcores3/node/node16/cpu117 ../../cpu/cpu117
+tests/virhostcpudata/linux-subcores3/node/node16/cpu118 ../../cpu/cpu118
+tests/virhostcpudata/linux-subcores3/node/node16/cpu119 ../../cpu/cpu119
+tests/virhostcpudata/linux-subcores3/node/node16/cpu80 ../../cpu/cpu80
+tests/virhostcpudata/linux-subcores3/node/node16/cpu81 ../../cpu/cpu81
+tests/virhostcpudata/linux-subcores3/node/node16/cpu82 ../../cpu/cpu82
+tests/virhostcpudata/linux-subcores3/node/node16/cpu83 ../../cpu/cpu83
+tests/virhostcpudata/linux-subcores3/node/node16/cpu84 ../../cpu/cpu84
+tests/virhostcpudata/linux-subcores3/node/node16/cpu85 ../../cpu/cpu85
+tests/virhostcpudata/linux-subcores3/node/node16/cpu86 ../../cpu/cpu86
+tests/virhostcpudata/linux-subcores3/node/node16/cpu87 ../../cpu/cpu87
+tests/virhostcpudata/linux-subcores3/node/node16/cpu88 ../../cpu/cpu88
+tests/virhostcpudata/linux-subcores3/node/node16/cpu89 ../../cpu/cpu89
+tests/virhostcpudata/linux-subcores3/node/node16/cpu90 ../../cpu/cpu90
+tests/virhostcpudata/linux-subcores3/node/node16/cpu91 ../../cpu/cpu91
+tests/virhostcpudata/linux-subcores3/node/node16/cpu92 ../../cpu/cpu92
+tests/virhostcpudata/linux-subcores3/node/node16/cpu93 ../../cpu/cpu93
+tests/virhostcpudata/linux-subcores3/node/node16/cpu94 ../../cpu/cpu94
+tests/virhostcpudata/linux-subcores3/node/node16/cpu95 ../../cpu/cpu95
+tests/virhostcpudata/linux-subcores3/node/node16/cpu96 ../../cpu/cpu96
+tests/virhostcpudata/linux-subcores3/node/node16/cpu97 ../../cpu/cpu97
+tests/virhostcpudata/linux-subcores3/node/node16/cpu98 ../../cpu/cpu98
+tests/virhostcpudata/linux-subcores3/node/node16/cpu99 ../../cpu/cpu99
+tests/virhostcpudata/linux-subcores3/node/node17/cpu120 ../../cpu/cpu120
+tests/virhostcpudata/linux-subcores3/node/node17/cpu121 ../../cpu/cpu121
+tests/virhostcpudata/linux-subcores3/node/node17/cpu122 ../../cpu/cpu122
+tests/virhostcpudata/linux-subcores3/node/node17/cpu123 ../../cpu/cpu123
+tests/virhostcpudata/linux-subcores3/node/node17/cpu124 ../../cpu/cpu124
+tests/virhostcpudata/linux-subcores3/node/node17/cpu125 ../../cpu/cpu125
+tests/virhostcpudata/linux-subcores3/node/node17/cpu126 ../../cpu/cpu126
+tests/virhostcpudata/linux-subcores3/node/node17/cpu127 ../../cpu/cpu127
+tests/virhostcpudata/linux-subcores3/node/node17/cpu128 ../../cpu/cpu128
+tests/virhostcpudata/linux-subcores3/node/node17/cpu129 ../../cpu/cpu129
+tests/virhostcpudata/linux-subcores3/node/node17/cpu130 ../../cpu/cpu130
+tests/virhostcpudata/linux-subcores3/node/node17/cpu131 ../../cpu/cpu131
+tests/virhostcpudata/linux-subcores3/node/node17/cpu132 ../../cpu/cpu132
+tests/virhostcpudata/linux-subcores3/node/node17/cpu133 ../../cpu/cpu133
+tests/virhostcpudata/linux-subcores3/node/node17/cpu134 ../../cpu/cpu134
+tests/virhostcpudata/linux-subcores3/node/node17/cpu135 ../../cpu/cpu135
+tests/virhostcpudata/linux-subcores3/node/node17/cpu136 ../../cpu/cpu136
+tests/virhostcpudata/linux-subcores3/node/node17/cpu137 ../../cpu/cpu137
+tests/virhostcpudata/linux-subcores3/node/node17/cpu138 ../../cpu/cpu138
+tests/virhostcpudata/linux-subcores3/node/node17/cpu139 ../../cpu/cpu139
+tests/virhostcpudata/linux-subcores3/node/node17/cpu140 ../../cpu/cpu140
+tests/virhostcpudata/linux-subcores3/node/node17/cpu141 ../../cpu/cpu141
+tests/virhostcpudata/linux-subcores3/node/node17/cpu142 ../../cpu/cpu142
+tests/virhostcpudata/linux-subcores3/node/node17/cpu143 ../../cpu/cpu143
+tests/virhostcpudata/linux-subcores3/node/node17/cpu144 ../../cpu/cpu144
+tests/virhostcpudata/linux-subcores3/node/node17/cpu145 ../../cpu/cpu145
+tests/virhostcpudata/linux-subcores3/node/node17/cpu146 ../../cpu/cpu146
+tests/virhostcpudata/linux-subcores3/node/node17/cpu147 ../../cpu/cpu147
+tests/virhostcpudata/linux-subcores3/node/node17/cpu148 ../../cpu/cpu148
+tests/virhostcpudata/linux-subcores3/node/node17/cpu149 ../../cpu/cpu149
+tests/virhostcpudata/linux-subcores3/node/node17/cpu150 ../../cpu/cpu150
+tests/virhostcpudata/linux-subcores3/node/node17/cpu151 ../../cpu/cpu151
+tests/virhostcpudata/linux-subcores3/node/node17/cpu152 ../../cpu/cpu152
+tests/virhostcpudata/linux-subcores3/node/node17/cpu153 ../../cpu/cpu153
+tests/virhostcpudata/linux-subcores3/node/node17/cpu154 ../../cpu/cpu154
+tests/virhostcpudata/linux-subcores3/node/node17/cpu155 ../../cpu/cpu155
+tests/virhostcpudata/linux-subcores3/node/node17/cpu156 ../../cpu/cpu156
+tests/virhostcpudata/linux-subcores3/node/node17/cpu157 ../../cpu/cpu157
+tests/virhostcpudata/linux-subcores3/node/node17/cpu158 ../../cpu/cpu158
+tests/virhostcpudata/linux-subcores3/node/node17/cpu159 ../../cpu/cpu159
+tests/virhostcpudata/linux-test2/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-test2/node/node0/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-test3/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-test3/node/node0/cpu12 ../../cpu/cpu12
+tests/virhostcpudata/linux-test3/node/node0/cpu16 ../../cpu/cpu16
+tests/virhostcpudata/linux-test3/node/node0/cpu20 ../../cpu/cpu20
+tests/virhostcpudata/linux-test3/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-test3/node/node0/cpu8 ../../cpu/cpu8
+tests/virhostcpudata/linux-test3/node/node1/cpu24 ../../cpu/cpu24
+tests/virhostcpudata/linux-test3/node/node1/cpu28 ../../cpu/cpu28
+tests/virhostcpudata/linux-test3/node/node1/cpu32 ../../cpu/cpu32
+tests/virhostcpudata/linux-test3/node/node1/cpu36 ../../cpu/cpu36
+tests/virhostcpudata/linux-test3/node/node1/cpu40 ../../cpu/cpu40
+tests/virhostcpudata/linux-test3/node/node1/cpu44 ../../cpu/cpu44
+tests/virhostcpudata/linux-test3/node/node2/cpu11 ../../cpu/cpu11
+tests/virhostcpudata/linux-test3/node/node2/cpu15 ../../cpu/cpu15
+tests/virhostcpudata/linux-test3/node/node2/cpu19 ../../cpu/cpu19
+tests/virhostcpudata/linux-test3/node/node2/cpu23 ../../cpu/cpu23
+tests/virhostcpudata/linux-test3/node/node2/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-test3/node/node2/cpu7 ../../cpu/cpu7
+tests/virhostcpudata/linux-test3/node/node3/cpu27 ../../cpu/cpu27
+tests/virhostcpudata/linux-test3/node/node3/cpu31 ../../cpu/cpu31
+tests/virhostcpudata/linux-test3/node/node3/cpu35 ../../cpu/cpu35
+tests/virhostcpudata/linux-test3/node/node3/cpu39 ../../cpu/cpu39
+tests/virhostcpudata/linux-test3/node/node3/cpu43 ../../cpu/cpu43
+tests/virhostcpudata/linux-test3/node/node3/cpu47 ../../cpu/cpu47
+tests/virhostcpudata/linux-test3/node/node4/cpu10 ../../cpu/cpu10
+tests/virhostcpudata/linux-test3/node/node4/cpu14 ../../cpu/cpu14
+tests/virhostcpudata/linux-test3/node/node4/cpu18 ../../cpu/cpu18
+tests/virhostcpudata/linux-test3/node/node4/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-test3/node/node4/cpu22 ../../cpu/cpu22
+tests/virhostcpudata/linux-test3/node/node4/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-test3/node/node5/cpu26 ../../cpu/cpu26
+tests/virhostcpudata/linux-test3/node/node5/cpu30 ../../cpu/cpu30
+tests/virhostcpudata/linux-test3/node/node5/cpu34 ../../cpu/cpu34
+tests/virhostcpudata/linux-test3/node/node5/cpu38 ../../cpu/cpu38
+tests/virhostcpudata/linux-test3/node/node5/cpu42 ../../cpu/cpu42
+tests/virhostcpudata/linux-test3/node/node5/cpu46 ../../cpu/cpu46
+tests/virhostcpudata/linux-test3/node/node6/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-test3/node/node6/cpu13 ../../cpu/cpu13
+tests/virhostcpudata/linux-test3/node/node6/cpu17 ../../cpu/cpu17
+tests/virhostcpudata/linux-test3/node/node6/cpu21 ../../cpu/cpu21
+tests/virhostcpudata/linux-test3/node/node6/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-test3/node/node6/cpu9 ../../cpu/cpu9
+tests/virhostcpudata/linux-test3/node/node7/cpu25 ../../cpu/cpu25
+tests/virhostcpudata/linux-test3/node/node7/cpu29 ../../cpu/cpu29
+tests/virhostcpudata/linux-test3/node/node7/cpu33 ../../cpu/cpu33
+tests/virhostcpudata/linux-test3/node/node7/cpu37 ../../cpu/cpu37
+tests/virhostcpudata/linux-test3/node/node7/cpu41 ../../cpu/cpu41
+tests/virhostcpudata/linux-test3/node/node7/cpu45 ../../cpu/cpu45
+tests/virhostcpudata/linux-test4/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-test4/node/node0/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-test4/node/node0/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-test4/node/node0/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-test4/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-test4/node/node0/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-test4/node/node0/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-test4/node/node0/cpu7 ../../cpu/cpu7
+tests/virhostcpudata/linux-test4/node/node1/cpu10 ../../cpu/cpu10
+tests/virhostcpudata/linux-test4/node/node1/cpu11 ../../cpu/cpu11
+tests/virhostcpudata/linux-test4/node/node1/cpu12 ../../cpu/cpu12
+tests/virhostcpudata/linux-test4/node/node1/cpu13 ../../cpu/cpu13
+tests/virhostcpudata/linux-test4/node/node1/cpu14 ../../cpu/cpu14
+tests/virhostcpudata/linux-test4/node/node1/cpu15 ../../cpu/cpu15
+tests/virhostcpudata/linux-test4/node/node1/cpu8 ../../cpu/cpu8
+tests/virhostcpudata/linux-test4/node/node1/cpu9 ../../cpu/cpu9
+tests/virhostcpudata/linux-test6/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-test6/node/node0/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-test6/node/node0/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-test6/node/node0/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-test6/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-test6/node/node0/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-test6/node/node0/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-test6/node/node0/cpu7 ../../cpu/cpu7
+tests/virhostcpudata/linux-test7/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-test7/node/node0/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-test7/node/node0/cpu10 ../../cpu/cpu10
+tests/virhostcpudata/linux-test7/node/node0/cpu11 ../../cpu/cpu11
+tests/virhostcpudata/linux-test7/node/node0/cpu12 ../../cpu/cpu12
+tests/virhostcpudata/linux-test7/node/node0/cpu13 ../../cpu/cpu13
+tests/virhostcpudata/linux-test7/node/node0/cpu14 ../../cpu/cpu14
+tests/virhostcpudata/linux-test7/node/node0/cpu15 ../../cpu/cpu15
+tests/virhostcpudata/linux-test7/node/node0/cpu16 ../../cpu/cpu16
+tests/virhostcpudata/linux-test7/node/node0/cpu17 ../../cpu/cpu17
+tests/virhostcpudata/linux-test7/node/node0/cpu18 ../../cpu/cpu18
+tests/virhostcpudata/linux-test7/node/node0/cpu19 ../../cpu/cpu19
+tests/virhostcpudata/linux-test7/node/node0/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-test7/node/node0/cpu20 ../../cpu/cpu20
+tests/virhostcpudata/linux-test7/node/node0/cpu21 ../../cpu/cpu21
+tests/virhostcpudata/linux-test7/node/node0/cpu22 ../../cpu/cpu22
+tests/virhostcpudata/linux-test7/node/node0/cpu23 ../../cpu/cpu23
+tests/virhostcpudata/linux-test7/node/node0/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-test7/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-test7/node/node0/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-test7/node/node0/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-test7/node/node0/cpu7 ../../cpu/cpu7
+tests/virhostcpudata/linux-test7/node/node0/cpu8 ../../cpu/cpu8
+tests/virhostcpudata/linux-test7/node/node0/cpu9 ../../cpu/cpu9
+tests/virhostcpudata/linux-test8/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-test8/node/node0/cpu12 ../../cpu/cpu12
+tests/virhostcpudata/linux-test8/node/node0/cpu16 ../../cpu/cpu16
+tests/virhostcpudata/linux-test8/node/node0/cpu20 ../../cpu/cpu20
+tests/virhostcpudata/linux-test8/node/node0/cpu24 ../../cpu/cpu24
+tests/virhostcpudata/linux-test8/node/node0/cpu28 ../../cpu/cpu28
+tests/virhostcpudata/linux-test8/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-test8/node/node0/cpu8 ../../cpu/cpu8
+tests/virhostcpudata/linux-test8/node/node1/cpu32 ../../cpu/cpu32
+tests/virhostcpudata/linux-test8/node/node1/cpu36 ../../cpu/cpu36
+tests/virhostcpudata/linux-test8/node/node1/cpu40 ../../cpu/cpu40
+tests/virhostcpudata/linux-test8/node/node1/cpu44 ../../cpu/cpu44
+tests/virhostcpudata/linux-test8/node/node1/cpu48 ../../cpu/cpu48
+tests/virhostcpudata/linux-test8/node/node1/cpu52 ../../cpu/cpu52
+tests/virhostcpudata/linux-test8/node/node1/cpu56 ../../cpu/cpu56
+tests/virhostcpudata/linux-test8/node/node1/cpu60 ../../cpu/cpu60
+tests/virhostcpudata/linux-test8/node/node2/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-test8/node/node2/cpu13 ../../cpu/cpu13
+tests/virhostcpudata/linux-test8/node/node2/cpu17 ../../cpu/cpu17
+tests/virhostcpudata/linux-test8/node/node2/cpu21 ../../cpu/cpu21
+tests/virhostcpudata/linux-test8/node/node2/cpu25 ../../cpu/cpu25
+tests/virhostcpudata/linux-test8/node/node2/cpu29 ../../cpu/cpu29
+tests/virhostcpudata/linux-test8/node/node2/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-test8/node/node2/cpu9 ../../cpu/cpu9
+tests/virhostcpudata/linux-test8/node/node3/cpu33 ../../cpu/cpu33
+tests/virhostcpudata/linux-test8/node/node3/cpu37 ../../cpu/cpu37
+tests/virhostcpudata/linux-test8/node/node3/cpu41 ../../cpu/cpu41
+tests/virhostcpudata/linux-test8/node/node3/cpu45 ../../cpu/cpu45
+tests/virhostcpudata/linux-test8/node/node3/cpu49 ../../cpu/cpu49
+tests/virhostcpudata/linux-test8/node/node3/cpu53 ../../cpu/cpu53
+tests/virhostcpudata/linux-test8/node/node3/cpu57 ../../cpu/cpu57
+tests/virhostcpudata/linux-test8/node/node3/cpu61 ../../cpu/cpu61
+tests/virhostcpudata/linux-test8/node/node4/cpu10 ../../cpu/cpu10
+tests/virhostcpudata/linux-test8/node/node4/cpu14 ../../cpu/cpu14
+tests/virhostcpudata/linux-test8/node/node4/cpu18 ../../cpu/cpu18
+tests/virhostcpudata/linux-test8/node/node4/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-test8/node/node4/cpu22 ../../cpu/cpu22
+tests/virhostcpudata/linux-test8/node/node4/cpu26 ../../cpu/cpu26
+tests/virhostcpudata/linux-test8/node/node4/cpu30 ../../cpu/cpu30
+tests/virhostcpudata/linux-test8/node/node4/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-test8/node/node5/cpu34 ../../cpu/cpu34
+tests/virhostcpudata/linux-test8/node/node5/cpu38 ../../cpu/cpu38
+tests/virhostcpudata/linux-test8/node/node5/cpu42 ../../cpu/cpu42
+tests/virhostcpudata/linux-test8/node/node5/cpu46 ../../cpu/cpu46
+tests/virhostcpudata/linux-test8/node/node5/cpu50 ../../cpu/cpu50
+tests/virhostcpudata/linux-test8/node/node5/cpu54 ../../cpu/cpu54
+tests/virhostcpudata/linux-test8/node/node5/cpu58 ../../cpu/cpu58
+tests/virhostcpudata/linux-test8/node/node5/cpu62 ../../cpu/cpu62
+tests/virhostcpudata/linux-test8/node/node6/cpu35 ../../cpu/cpu35
+tests/virhostcpudata/linux-test8/node/node6/cpu39 ../../cpu/cpu39
+tests/virhostcpudata/linux-test8/node/node6/cpu43 ../../cpu/cpu43
+tests/virhostcpudata/linux-test8/node/node6/cpu47 ../../cpu/cpu47
+tests/virhostcpudata/linux-test8/node/node6/cpu51 ../../cpu/cpu51
+tests/virhostcpudata/linux-test8/node/node6/cpu55 ../../cpu/cpu55
+tests/virhostcpudata/linux-test8/node/node6/cpu59 ../../cpu/cpu59
+tests/virhostcpudata/linux-test8/node/node6/cpu63 ../../cpu/cpu63
+tests/virhostcpudata/linux-test8/node/node7/cpu11 ../../cpu/cpu11
+tests/virhostcpudata/linux-test8/node/node7/cpu15 ../../cpu/cpu15
+tests/virhostcpudata/linux-test8/node/node7/cpu19 ../../cpu/cpu19
+tests/virhostcpudata/linux-test8/node/node7/cpu23 ../../cpu/cpu23
+tests/virhostcpudata/linux-test8/node/node7/cpu27 ../../cpu/cpu27
+tests/virhostcpudata/linux-test8/node/node7/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-test8/node/node7/cpu31 ../../cpu/cpu31
+tests/virhostcpudata/linux-test8/node/node7/cpu7 ../../cpu/cpu7
diff --git a/SPECS/libvirt.spec b/SPECS/libvirt.spec
new file mode 100644
index 0000000..8e1198d
--- /dev/null
+++ b/SPECS/libvirt.spec
@@ -0,0 +1,2672 @@
+# -*- rpm-spec -*-
+
+# This spec file assumes you are building on a Fedora or RHEL version
+# that's still supported by the vendor. It may work on other distros
+# or versions, but no effort will be made to ensure that going forward.
+%define min_rhel 6
+%define min_fedora 26
+
+%if (0%{?fedora} && 0%{?fedora} >= %{min_fedora}) || (0%{?rhel} && 0%{?rhel} >= %{min_rhel})
+    %define supported_platform 1
+%else
+    %define supported_platform 0
+%endif
+
+# Default to skipping autoreconf.  Distros can change just this one line
+# (or provide a command-line override) if they backport any patches that
+# touch configure.ac or Makefile.am.
+# Always run autoreconf
+%{!?enable_autotools:%global enable_autotools 1}
+
+# The hypervisor drivers that run in libvirtd
+%define with_qemu          0%{!?_without_qemu:1}
+%define with_lxc           0%{!?_without_lxc:1}
+%define with_uml           0%{!?_without_uml:1}
+%define with_libxl         0%{!?_without_libxl:1}
+%define with_vbox          0%{!?_without_vbox:1}
+
+%define with_qemu_tcg      %{with_qemu}
+
+%define qemu_kvm_arches %{ix86} x86_64
+
+%if 0%{?fedora}
+    %define qemu_kvm_arches %{ix86} x86_64 %{power64} s390x %{arm} aarch64
+%endif
+
+%if 0%{?rhel}
+    %define with_qemu_tcg 0
+    %define qemu_kvm_arches x86_64
+    %if 0%{?rhel} >= 7
+        %define qemu_kvm_arches x86_64 %{power64} aarch64 s390x
+    %endif
+%endif
+
+%ifarch %{qemu_kvm_arches}
+    %define with_qemu_kvm      %{with_qemu}
+%else
+    %define with_qemu_kvm      0
+%endif
+
+%if ! %{with_qemu_tcg} && ! %{with_qemu_kvm}
+    %define with_qemu 0
+%endif
+
+# Then the hypervisor drivers that run outside libvirtd, in libvirt.so
+%define with_openvz        0%{!?_without_openvz:1}
+%define with_vmware        0%{!?_without_vmware:1}
+%define with_phyp          0%{!?_without_phyp:1}
+%define with_esx           0%{!?_without_esx:1}
+%define with_hyperv        0%{!?_without_hyperv:1}
+
+# Then the secondary host drivers, which run inside libvirtd
+%if 0%{?fedora} || 0%{?rhel} >= 7
+    %define with_storage_rbd      0%{!?_without_storage_rbd:1}
+%else
+    %define with_storage_rbd      0
+%endif
+%if 0%{?fedora}
+    %define with_storage_sheepdog 0%{!?_without_storage_sheepdog:1}
+%else
+    %define with_storage_sheepdog 0
+%endif
+%define with_storage_gluster 0%{!?_without_storage_gluster:1}
+%define with_numactl          0%{!?_without_numactl:1}
+
+# F25+ has zfs-fuse
+%if 0%{?fedora}
+    %define with_storage_zfs      0%{!?_without_storage_zfs:1}
+%else
+    %define with_storage_zfs      0
+%endif
+
+# A few optional bits off by default, we enable later
+%define with_fuse          0%{!?_without_fuse:0}
+%define with_sanlock       0%{!?_without_sanlock:0}
+%define with_systemd       0%{!?_without_systemd:0}
+%define with_numad         0%{!?_without_numad:0}
+%define with_firewalld     0%{!?_without_firewalld:0}
+%define with_firewalld_zone 0%{!?_without_firewalld_zone:0}
+%define with_libssh2       0%{!?_without_libssh2:0}
+%define with_wireshark     0%{!?_without_wireshark:0}
+%define with_libssh        0%{!?_without_libssh:0}
+%define with_bash_completion  0%{!?_without_bash_completion:0}
+%define with_pm_utils      1
+
+# Finally set the OS / architecture specific special cases
+
+# Xen is available only on i386 x86_64 ia64
+%ifnarch %{ix86} x86_64 ia64
+    %define with_libxl 0
+%endif
+
+# vbox is available only on i386 x86_64
+%ifnarch %{ix86} x86_64
+    %define with_vbox 0
+%endif
+
+# Numactl is not available on s390[x] and ARM
+%ifarch s390 s390x %{arm}
+    %define with_numactl 0
+%endif
+
+# zfs-fuse is not available on some architectures
+%ifarch s390 s390x aarch64
+    %define with_storage_zfs 0
+%endif
+
+
+# RHEL doesn't ship OpenVZ, VBox, UML, PowerHypervisor,
+# VMware, libxenserver (xenapi), libxenlight (Xen 4.1 and newer),
+# or HyperV.
+%if 0%{?rhel}
+    %define with_openvz 0
+    %define with_vbox 0
+    %define with_uml 0
+    %define with_phyp 0
+    %define with_vmware 0
+    %define with_xenapi 0
+    %define with_libxl 0
+    %define with_hyperv 0
+    %define with_vz 0
+
+    %if 0%{?rhel} > 7
+        %define with_lxc 0
+    %endif
+%endif
+
+# Fedora 17 / RHEL-7 are first where we use systemd. Although earlier
+# Fedora has systemd, libvirt still used sysvinit there.
+%if 0%{?fedora} || 0%{?rhel} >= 7
+    %define with_systemd 1
+    %define with_pm_utils 0
+%endif
+
+# Fedora 18 / RHEL-7 are first where firewalld support is enabled
+%if 0%{?fedora} || 0%{?rhel} >= 7
+    %define with_firewalld 1
+%endif
+
+%if 0%{?fedora} >= 30 || 0%{?rhel} > 7
+    %define with_firewalld_zone 0%{!?_without_firewalld_zone:1}
+%endif
+
+
+# fuse is used to provide virtualized /proc for LXC
+%if %{with_lxc} && 0%{?rhel} != 6
+    %define with_fuse      0%{!?_without_fuse:1}
+%endif
+
+# Enable sanlock library for lock management with QEMU
+# Sanlock is available only on arches where kvm is available for RHEL
+%if 0%{?fedora}
+    %define with_sanlock 0%{!?_without_sanlock:1}
+%endif
+%if 0%{?rhel}
+    %ifarch %{qemu_kvm_arches}
+        %define with_sanlock 0%{!?_without_sanlock:1}
+    %endif
+%endif
+
+# Enable libssh2 transport for new enough distros
+%if 0%{?fedora}
+    %define with_libssh2 0%{!?_without_libssh2:1}
+%endif
+
+# Enable wireshark plugins for all distros shipping libvirt 1.2.2 or newer
+%if 0%{?fedora}
+    %define with_wireshark 0%{!?_without_wireshark:1}
+%endif
+%if 0%{?fedora} || 0%{?rhel} > 7
+    %define wireshark_plugindir %(pkg-config --variable plugindir wireshark)
+%else
+    %define wireshark_plugindir %{_libdir}/wireshark/plugins
+%endif
+
+# Enable libssh transport for new enough distros
+%if 0%{?fedora} || 0%{?rhel} > 7
+    %define with_libssh 0%{!?_without_libssh:1}
+%endif
+
+# Enable bash-completion for new enough distros
+%if 0%{?fedora} || 0%{?rhel} >= 7
+    %define with_bash_completion  0%{!?_without_bash_completion:1}
+%endif
+
+# Use Python 3 when possible, Python 2 otherwise
+%if 0%{?fedora}
+    %define python python3
+%else
+    %if 0%{?rhel} > 7
+        %define python python3-devel
+    %else
+        %define python python2
+    %endif
+%endif
+
+
+%if %{with_qemu} || %{with_lxc} || %{with_uml}
+# numad is used to manage the CPU and memory placement dynamically,
+# it's not available on s390[x] and ARM.
+    %ifnarch s390 s390x %{arm}
+        %define with_numad    0%{!?_without_numad:1}
+    %endif
+%endif
+
+# Force QEMU to run as non-root
+%define qemu_user  qemu
+%define qemu_group  qemu
+
+
+%if 0%{?fedora} || 0%{?rhel} >= 7
+    %define with_systemd_macros 1
+%else
+    %define with_systemd_macros 0
+%endif
+
+
+# RHEL releases provide stable tool chains and so it is safe to turn
+# compiler warning into errors without being worried about frequent
+# changes in reported warnings
+%if 0%{?rhel}
+    %define enable_werror --enable-werror
+%else
+    %define enable_werror --disable-werror
+%endif
+
+%if 0%{?rhel} == 7
+    %define tls_priority "NORMAL"
+%else
+    %define tls_priority "@LIBVIRT,SYSTEM"
+%endif
+
+
+Summary: Library providing a simple virtualization API
+Name: libvirt
+Version: 4.5.0
+Release: 23%{?dist}%{?extra_release}
+License: LGPLv2+
+URL: https://libvirt.org/
+
+%if %(echo %{version} | grep -q "\.0$"; echo $?) == 1
+    %define mainturl stable_updates/
+%endif
+Source: https://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.xz
+Source1: symlinks
+
+Patch1: libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch
+Patch2: libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch
+Patch3: libvirt-qemu-Add-capability-for-the-HTM-pSeries-feature.patch
+Patch4: libvirt-conf-Parse-and-format-the-HTM-pSeries-feature.patch
+Patch5: libvirt-qemu-Format-the-HTM-pSeries-feature.patch
+Patch6: libvirt-qemu-hotplug-Don-t-access-srcPriv-when-it-s-not-allocated.patch
+Patch7: libvirt-qemuDomainNestedJobAllowed-Allow-QEMU_JOB_NONE.patch
+Patch8: libvirt-src-Mention-DEVICE_REMOVAL_FAILED-event-in-virDomainDetachDeviceAlias-docs.patch
+Patch9: libvirt-virsh.pod-Drop-persistent-for-detach-device-alias.patch
+Patch10: libvirt-qemu-don-t-use-chardev-FD-passing-with-standalone-args.patch
+Patch11: libvirt-qemu-remove-chardevStdioLogd-param-from-vhostuser-code-path.patch
+Patch12: libvirt-qemu-consolidate-parameters-of-qemuBuildChrChardevStr-into-flags.patch
+Patch13: libvirt-qemu-don-t-use-chardev-FD-passing-for-vhostuser-backend.patch
+Patch14: libvirt-qemu-fix-UNIX-socket-chardevs-operating-in-client-mode.patch
+Patch15: libvirt-qemuDomainDeviceDefValidateNetwork-Check-for-range-only-if-IP-prefix-set.patch
+Patch16: libvirt-qemu-hotplug-Do-not-try-to-add-secret-object-for-TLS-if-it-does-not-exist.patch
+Patch17: libvirt-qemu-monitor-Make-qemuMonitorAddObject-more-robust-against-programming-errors.patch
+Patch18: libvirt-virDomainConfNWFilterInstantiate-initialize-xml-to-avoid-random-crash.patch
+Patch19: libvirt-qemuProcessStartPRDaemonHook-Try-to-set-NS-iff-domain-was-started-with-one.patch
+Patch20: libvirt-qemuDomainValidateStorageSource-Relax-PR-validation.patch
+Patch21: libvirt-virStoragePRDefFormat-Suppress-path-formatting-for-migratable-XML.patch
+Patch22: libvirt-qemu-Wire-up-PR_MANAGER_STATUS_CHANGED-event.patch
+Patch23: libvirt-qemu_monitor-Introduce-qemuMonitorJSONGetPRManagerInfo.patch
+Patch24: libvirt-qemu-Fetch-pr-helper-process-info-on-reconnect.patch
+Patch25: libvirt-qemu-Fix-ATTRIBUTE_NONNULL-for-qemuMonitorAddObject.patch
+Patch26: libvirt-virsh.pod-Fix-a-command-name-typo-in-nwfilter-binding-undefine.patch
+Patch27: libvirt-docs-schema-Add-missing-alias-to-vsock-device.patch
+Patch28: libvirt-virnetdevtap-Don-t-crash-on-ifname-in-virNetDevTapInterfaceStats.patch
+Patch29: libvirt-tests-fix-TLS-handshake-failure-with-TLS-1.3.patch
+Patch30: libvirt-qemu-hotplug-don-t-overwrite-error-message-in-qemuDomainAttachNetDevice.patch
+Patch31: libvirt-qemu-hotplug-report-error-when-changing-rom-enabled-attr-for-net-iface.patch
+Patch32: libvirt-qemu-Fix-setting-global_period-cputune-element.patch
+Patch33: libvirt-tests-qemucaps-Add-test-data-for-upcoming-qemu-3.0.0.patch
+Patch34: libvirt-qemu-capabilities-Add-capability-for-werror-rerror-for-usb-device-frontend.patch
+Patch35: libvirt-qemu-command-Move-graphics-iteration-to-its-own-function.patch
+Patch36: libvirt-qemu-address-Handle-all-the-video-devices-within-a-single-loop.patch
+Patch37: libvirt-conf-Introduce-virDomainVideoDefClear-helper.patch
+Patch38: libvirt-conf-Introduce-virDomainDefPostParseVideo-helper.patch
+Patch39: libvirt-qemu-validate-Enforce-compile-time-switch-type-checking-for-videos.patch
+Patch40: libvirt-tests-Add-capabilities-data-for-QEMU-2.11-x86_64.patch
+Patch41: libvirt-tests-Update-capabilities-data-for-QEMU-3.0.0-x86_64.patch
+Patch42: libvirt-qemu-qemuBuildHostdevCommandLine-Use-a-helper-variable-mdevsrc.patch
+Patch43: libvirt-qemu-caps-Introduce-a-capability-for-egl-headless.patch
+Patch44: libvirt-qemu-Introduce-a-new-graphics-display-type-headless.patch
+Patch45: libvirt-qemu-caps-Add-vfio-pci.display-capability.patch
+Patch46: libvirt-conf-Introduce-virDomainGraphicsDefHasOpenGL-helper.patch
+Patch47: libvirt-conf-Replace-error-with-cleanup-in-virDomainHostdevDefParseXMLSubsys.patch
+Patch48: libvirt-conf-Introduce-new-hostdev-attribute-display.patch
+Patch49: libvirt-qemu-command-Enable-formatting-vfio-pci.display-option-onto-cmdline.patch
+Patch50: libvirt-docs-Rephrase-the-mediated-devices-hostdev-section-a-bit.patch
+Patch51: libvirt-conf-Introduce-new-video-type-none.patch
+Patch52: libvirt-virt-xml-validate-Add-schema-for-nwfilterbinding.patch
+Patch53: libvirt-tools-Fix-typo-generating-adapter_wwpn-field.patch
+Patch54: libvirt-src-Fix-memory-leak-in-virNWFilterBindingDispose.patch
+Patch55: libvirt-esx-storage-Fix-typo-lsilogic-lsiLogic.patch
+Patch56: libvirt-networkGetDHCPLeases-Don-t-always-report-error-if-unable-to-read-leases-file.patch
+Patch57: libvirt-nwfilter-Resolve-SEGV-for-NWFilter-Snoop-processing.patch
+Patch58: libvirt-qemu-Remove-unused-bypassSecurityDriver-from-qemuOpenFileAs.patch
+Patch59: libvirt-qemuDomainSaveMemory-Don-t-enforce-dynamicOwnership.patch
+Patch60: libvirt-domain_nwfilter-Return-early-if-net-has-no-name-in-virDomainConfNWFilterTeardownImpl.patch
+Patch61: libvirt-examples-Add-clean-traffic-gateway-into-nwfilters.patch
+Patch62: libvirt-qemu-Exempt-video-model-none-from-getting-a-PCI-address-on-Q35.patch
+Patch63: libvirt-conf-Fix-a-error-msg-typo-in-virDomainVideoDefValidate.patch
+Patch64: libvirt-qemu_migration-Avoid-writing-to-freed-memory.patch
+Patch65: libvirt-tests-Add-missing-thread_siblings_list-files.patch
+Patch66: libvirt-util-Rewrite-virHostCPUCountThreadSiblings.patch
+Patch67: libvirt-utils-Remove-arbitrary-limit-on-socket_id-core_id.patch
+Patch68: libvirt-tests-Add-linux-high-ids-test.patch
+Patch69: libvirt-qemu-hotplug-Fix-asynchronous-unplug-of-shmem.patch
+Patch70: libvirt-tests-rename-hugepages-to-hugepages-default.patch
+Patch71: libvirt-tests-extract-hugepages-numa-default-dimm-out-of-hugepages-numa.patch
+Patch72: libvirt-tests-rename-hugepages-numa-into-hugepages-numa-default.patch
+Patch73: libvirt-tests-remove-unnecessary-XML-elements-from-hugepages-numa-default.patch
+Patch74: libvirt-tests-extract-pages-discard-out-of-hugepages-pages.patch
+Patch75: libvirt-tests-rename-hugepages-pages-into-hugepages-numa-nodeset.patch
+Patch76: libvirt-tests-rename-hugepages-pages2-into-hugepages-numa-default-2M.patch
+Patch77: libvirt-tests-extract-pages-discard-hugepages-out-of-hugepages-pages3.patch
+Patch78: libvirt-tests-rename-hugepages-pages3-into-hugepages-numa-nodeset-part.patch
+Patch79: libvirt-tests-rename-hugepages-pages4-into-hugepages-numa-nodeset-nonexist.patch
+Patch80: libvirt-tests-rename-hugepages-pages5-into-hugepages-default-2M.patch
+Patch81: libvirt-tests-rename-hugepages-pages6-into-hugepages-default-system-size.patch
+Patch82: libvirt-tests-rename-hugepages-pages7-into-pages-dimm-discard.patch
+Patch83: libvirt-tests-rename-hugepages-pages8-into-hugepages-nodeset-nonexist.patch
+Patch84: libvirt-tests-introduce-hugepages-default-1G-nodeset-2M.patch
+Patch85: libvirt-tests-introduce-hugepages-nodeset.patch
+Patch86: libvirt-conf-Move-hugepage-XML-validation-check-out-of-qemu_command.patch
+Patch87: libvirt-conf-Move-hugepages-validation-out-of-XML-parser.patch
+Patch88: libvirt-conf-Introduce-virDomainDefPostParseMemtune.patch
+Patch89: libvirt-tests-sev-Test-launch-security-with-specific-QEMU-version.patch
+Patch90: libvirt-qemu-Fix-probing-of-AMD-SEV-support.patch
+Patch91: libvirt-qemu-caps-Format-SEV-platform-data-into-qemuCaps-cache.patch
+Patch92: libvirt-conf-Parse-guestfwd-channel-device-info-again.patch
+Patch93: libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch
+Patch94: libvirt-storage-Add-shrink-to-qemu-img-command-when-shrinking-vol.patch
+Patch95: libvirt-access-Fix-nwfilter-binding-ACL-access-API-name-generation.patch
+Patch96: libvirt-conf-Add-validation-of-input-devices.patch
+Patch97: libvirt-tests-qemu-Remove-disk-from-graphics-vnc-tls.patch
+Patch98: libvirt-tests-qemu-test-more-versions-for-graphics-vnc-tls.patch
+Patch99: libvirt-qemu-vnc-switch-to-tls-creds-x509.patch
+Patch100: libvirt-qemu-mdev-Use-vfio-pci-display-property-only-with-vfio-pci-mdevs.patch
+Patch101: libvirt-virDomainDefCompatibleDevice-Relax-alias-change-check.patch
+Patch102: libvirt-virDomainDetachDeviceFlags-Clarify-update-semantics.patch
+Patch103: libvirt-virDomainNetDefCheckABIStability-Check-for-MTU-change-too.patch
+Patch104: libvirt-qemu-monitor-Remove-qemuMonitorJSONExtractCPUArchInfo-wrapper.patch
+Patch105: libvirt-qemu-monitor-Use-target-instead-of-arch-in-reply-of-query-cpus-fast.patch
+Patch106: libvirt-conf-Fix-check-for-chardev-source-path.patch
+Patch107: libvirt-tests-Reuse-qemucapabilities-data-for-qemucaps2xml.patch
+Patch108: libvirt-tests-Add-more-tests-to-qemucaps2xml.patch
+Patch109: libvirt-qemu-Drop-QEMU_CAPS_ENABLE_KVM.patch
+Patch110: libvirt-qemu-Avoid-probing-non-native-binaries-all-the-time.patch
+Patch111: libvirt-qemu-Clarify-QEMU_CAPS_KVM.patch
+Patch112: libvirt-qemu-Don-t-check-for-dev-kvm-presence.patch
+Patch113: libvirt-tests-Follow-up-on-qemucaps2xmldata-rename.patch
+Patch114: libvirt-security-dac-also-label-listen-UNIX-sockets.patch
+Patch115: libvirt-virsh-Require-explicit-domain-for-domxml-to-native.patch
+Patch116: libvirt-virFileIsSharedFSType-Check-for-fuse.glusterfs-too.patch
+Patch117: libvirt-qemu-fix-up-permissions-for-pre-created-UNIX-sockets.patch
+Patch118: libvirt-cpu_map-Add-features-for-Icelake-CPUs.patch
+Patch119: libvirt-cpu_map-Add-Icelake-CPU-models.patch
+Patch120: libvirt-qemu-Properly-report-VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT.patch
+Patch121: libvirt-qemu-Report-more-appropriate-running-reasons.patch
+Patch122: libvirt-qemu-Pass-running-reason-to-RESUME-event-handler.patch
+Patch123: libvirt-qemu-Map-running-reason-to-resume-event-detail.patch
+Patch124: libvirt-qemu-Avoid-duplicate-resume-events-and-state-changes.patch
+Patch125: libvirt-conf-qemu-add-support-for-Hyper-V-frequency-MSRs.patch
+Patch126: libvirt-conf-qemu-add-support-for-Hyper-V-reenlightenment-notifications.patch
+Patch127: libvirt-conf-qemu-add-support-for-Hyper-V-PV-TLB-flush.patch
+Patch128: libvirt-virfile-fix-cast-align-error.patch
+Patch129: libvirt-virfiletest-Fix-test-name-prefix-for-virFileInData-test.patch
+Patch130: libvirt-virfiletst-Test-virFileIsSharedFS.patch
+Patch131: libvirt-virFileIsSharedFSType-Detect-direct-mount-points.patch
+Patch132: libvirt-virfile-Rework-virFileIsSharedFixFUSE.patch
+Patch133: libvirt-RHEL-network-regain-guest-network-connectivity-after-firewalld-switch-to-nftables.patch
+Patch134: libvirt-storage-Remove-secretPath-from-_virStorageBackendQemuImgInfo.patch
+Patch135: libvirt-storage-Allow-for-inputvol-to-have-any-format-for-encryption.patch
+Patch136: libvirt-storage-Allow-inputvol-to-be-encrypted.patch
+Patch137: libvirt-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName.patch
+Patch138: libvirt-docs-Enhance-polkit-documentation-to-describe-secondary-connection.patch
+Patch139: libvirt-qemu-Don-t-ignore-resume-events.patch
+Patch140: libvirt-virfile-Take-symlink-into-account-in-virFileIsSharedFixFUSE.patch
+Patch141: libvirt-qemu-Ignore-nwfilter-binding-instantiation-issues-during-reconnect.patch
+Patch142: libvirt-qemu-Set-identity-for-the-reconnect-all-thread.patch
+Patch143: libvirt-Revert-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName.patch
+Patch144: libvirt-access-Modify-the-VIR_ERR_ACCESS_DENIED-to-include-driverName_1.patch
+Patch145: libvirt-qemu-add-vfio-ap-capability.patch
+Patch146: libvirt-qemu-vfio-ap-device-support.patch
+Patch147: libvirt-qemu-Extract-MDEV-VFIO-PCI-validation-code-into-a-separate-helper.patch
+Patch148: libvirt-conf-Move-VFIO-AP-validation-from-post-parse-to-QEMU-validation-code.patch
+Patch149: libvirt-qemu-Fix-post-copy-migration-on-the-source.patch
+Patch150: libvirt-util-Don-t-overflow-in-virRandomBits.patch
+Patch151: libvirt-virrandom-Avoid-undefined-behaviour-in-virRandomBits.patch
+Patch152: libvirt-qemu-Drop-duplicated-code-from-qemuDomainDefValidateFeatures.patch
+Patch153: libvirt-tests-Add-capabilities-data-for-QEMU-3.1.0-on-ppc64.patch
+Patch154: libvirt-qemu-Introduce-QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV.patch
+Patch155: libvirt-conf-Parse-and-format-nested-hv-feature.patch
+Patch156: libvirt-qemu-Format-nested-hv-feature-on-the-command-line.patch
+Patch157: libvirt-qemu-Add-check-for-whether-KVM-nesting-is-enabled.patch
+Patch158: libvirt-secret-Add-check-validation-for-correct-usage-when-LookupByUUID.patch
+Patch159: libvirt-cpu-Add-support-for-stibp-x86_64-feature.patch
+Patch160: libvirt-virsh-Strip-XML-declaration-when-extracting-CPU-XMLs.patch
+Patch161: libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch
+Patch162: libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch
+Patch163: libvirt-qemu-Alter-val-usage-in-qemuSetUnprivSGIO.patch
+Patch164: libvirt-qemu-Alter-qemuSetUnprivSGIO-hostdev-shareable-logic.patch
+Patch165: libvirt-conf-correct-false-boot-order-error-during-domain-parse.patch
+Patch166: libvirt-qemu-Remove-duplicated-qemuAgentCheckError.patch
+Patch167: libvirt-qemu-require-reply-from-guest-agent-in-qemuAgentGetInterfaces.patch
+Patch168: libvirt-qemu-Filter-non-SCSI-hostdevs-in-qemuHostdevPrepareSCSIDevices.patch
+Patch169: libvirt-util-remove-const-specifier-from-nlmsghdr-arg-to-virNetlinkDumpCallback.patch
+Patch170: libvirt-util-add-a-function-to-insert-new-interfaces-to-IPv6CheckForwarding-list.patch
+Patch171: libvirt-util-use-nlmsg_find_attr-instead-of-an-open-coded-loop.patch
+Patch172: libvirt-util-check-accept_ra-for-all-nexthop-interfaces-of-multipath-routes.patch
+Patch173: libvirt-util-make-forgotten-changes-suggested-during-review-of-commit-d40b820c.patch
+Patch174: libvirt-qemu-Fix-logic-error-in-qemuSetUnprivSGIO.patch
+Patch175: libvirt-tests-qemuxml2argv-Add-test-case-for-empty-CDROM-with-cache-mode.patch
+Patch176: libvirt-qemu-command-Don-t-format-image-properties-for-empty-drive.patch
+Patch177: libvirt-RHEL-qemu-Fix-crash-trying-to-use-iSCSI-hostdev.patch
+Patch178: libvirt-docs-Drop-dev-net-tun-from-the-list-of-shared-devices.patch
+Patch179: libvirt-qemu-conf-Remove-dev-sev-from-the-default-cgroup-device-acl-list.patch
+Patch180: libvirt-qemu-cgroup-Expose-dev-sev-only-to-domains-that-require-SEV.patch
+Patch181: libvirt-qemu-domain-Add-dev-sev-into-the-domain-mount-namespace-selectively.patch
+Patch182: libvirt-security-dac-Relabel-dev-sev-in-the-namespace.patch
+Patch183: libvirt-qemu-caps-Use-CAP_DAC_OVERRIDE-for-probing-to-avoid-permission-issues.patch
+Patch184: libvirt-qemu-caps-Don-t-try-to-ask-for-CAP_DAC_OVERRIDE-if-non-root.patch
+Patch185: libvirt-Revert-RHEL-network-regain-guest-network-connectivity-after-firewalld-switch-to-nftables.patch
+Patch186: libvirt-configure-change-HAVE_FIREWALLD-to-WITH_FIREWALLD.patch
+Patch187: libvirt-util-move-all-firewalld-specific-stuff-into-its-own-files.patch
+Patch188: libvirt-util-new-virFirewallD-APIs-docs.patch
+Patch189: libvirt-configure-selectively-install-a-firewalld-libvirt-zone.patch
+Patch190: libvirt-network-set-firewalld-zone-of-bridges-to-libvirt-zone-when-appropriate.patch
+Patch191: libvirt-network-allow-configuring-firewalld-zone-for-virtual-network-bridge-device.patch
+Patch192: libvirt-util-remove-test-code-accidentally-committed-to-virFirewallDZoneExists.patch
+Patch193: libvirt-qemu-command-Don-t-skip-readonly-and-throttling-info-for-empty-drive.patch
+Patch194: libvirt-util-fix-memory-leak-in-virFirewallDInterfaceSetZone.patch
+Patch195: libvirt-network-explicitly-allow-icmp-icmpv6-in-libvirt-zonefile.patch
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-daemon-config-network = %{version}-%{release}
+Requires: libvirt-daemon-config-nwfilter = %{version}-%{release}
+%if %{with_libxl}
+Requires: libvirt-daemon-driver-libxl = %{version}-%{release}
+%endif
+%if %{with_lxc}
+Requires: libvirt-daemon-driver-lxc = %{version}-%{release}
+%endif
+%if %{with_qemu}
+Requires: libvirt-daemon-driver-qemu = %{version}-%{release}
+%endif
+%if %{with_uml}
+Requires: libvirt-daemon-driver-uml = %{version}-%{release}
+%endif
+%if %{with_vbox}
+Requires: libvirt-daemon-driver-vbox = %{version}-%{release}
+%endif
+Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release}
+
+Requires: libvirt-daemon-driver-interface = %{version}-%{release}
+Requires: libvirt-daemon-driver-secret = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage = %{version}-%{release}
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+Requires: libvirt-daemon-driver-nodedev = %{version}-%{release}
+Requires: libvirt-client = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+
+# All build-time requirements. Run-time requirements are
+# listed against each sub-RPM
+%if 0%{?enable_autotools}
+BuildRequires: autoconf
+BuildRequires: automake
+BuildRequires: gettext-devel
+BuildRequires: libtool
+BuildRequires: /usr/bin/pod2man
+%endif
+BuildRequires: gcc
+BuildRequires: git
+%if 0%{?fedora} >= 27 || 0%{?rhel} > 7
+BuildRequires: perl-interpreter
+%else
+BuildRequires: perl
+%endif
+BuildRequires: %{python}
+%if %{with_systemd}
+BuildRequires: systemd-units
+%endif
+%if %{with_libxl}
+BuildRequires: xen-devel
+%endif
+BuildRequires: libxml2-devel
+BuildRequires: libxslt
+BuildRequires: readline-devel
+%if %{with_bash_completion}
+BuildRequires: bash-completion >= 2.0
+%endif
+BuildRequires: ncurses-devel
+BuildRequires: gettext
+BuildRequires: libtasn1-devel
+%if (0%{?rhel} && 0%{?rhel} < 7)
+BuildRequires: libgcrypt-devel
+%endif
+BuildRequires: gnutls-devel
+BuildRequires: libattr-devel
+# For pool-build probing for existing pools
+BuildRequires: libblkid-devel >= 2.17
+# for augparse, optionally used in testing
+BuildRequires: augeas
+%if 0%{?fedora} || 0%{?rhel} >= 7
+BuildRequires: systemd-devel >= 185
+%else
+BuildRequires: libudev-devel >= 145
+%endif
+BuildRequires: libpciaccess-devel >= 0.10.9
+BuildRequires: yajl-devel
+%if %{with_sanlock}
+BuildRequires: sanlock-devel >= 2.4
+%endif
+BuildRequires: libpcap-devel
+%if 0%{?rhel} && 0%{?rhel} < 7
+BuildRequires: libnl-devel
+%else
+BuildRequires: libnl3-devel
+%endif
+BuildRequires: avahi-devel
+BuildRequires: libselinux-devel
+BuildRequires: dnsmasq >= 2.41
+BuildRequires: iptables
+%if 0%{?rhel} && 0%{?rhel} < 7
+BuildRequires: iptables-ipv6
+%endif
+BuildRequires: radvd
+BuildRequires: ebtables
+BuildRequires: module-init-tools
+BuildRequires: cyrus-sasl-devel
+%if 0%{?fedora} || 0%{?rhel} >= 7
+BuildRequires: polkit >= 0.112
+%else
+BuildRequires: polkit >= 0.93
+%endif
+# For mount/umount in FS driver
+BuildRequires: util-linux
+%if %{with_qemu}
+# For managing ACLs
+BuildRequires: libacl-devel
+# From QEMU RPMs
+BuildRequires: /usr/bin/qemu-img
+%endif
+# For LVM drivers
+BuildRequires: lvm2
+# For ISCSI driver
+BuildRequires: iscsi-initiator-utils
+# For disk driver
+BuildRequires: parted-devel
+# For Multipath support
+BuildRequires: device-mapper-devel
+%if %{with_storage_rbd}
+    %if 0%{?fedora} || 0%{?rhel} >= 7
+BuildRequires: librados2-devel
+BuildRequires: librbd1-devel
+    %else
+BuildRequires: ceph-devel
+    %endif
+%endif
+%if %{with_storage_gluster}
+BuildRequires: glusterfs-api-devel >= 3.4.1
+BuildRequires: glusterfs-devel >= 3.4.1
+%endif
+%if %{with_storage_sheepdog}
+BuildRequires: sheepdog
+%endif
+%if %{with_storage_zfs}
+# Support any conforming implementation of zfs. On stock Fedora
+# this is zfs-fuse, but could be zfsonlinux upstream RPMs
+BuildRequires: /sbin/zfs
+BuildRequires: /sbin/zpool
+%endif
+%if %{with_numactl}
+# For QEMU/LXC numa info
+BuildRequires: numactl-devel
+%endif
+BuildRequires: libcap-ng-devel >= 0.5.0
+%if %{with_fuse}
+BuildRequires: fuse-devel >= 2.8.6
+%endif
+%if %{with_phyp} || %{with_libssh2}
+BuildRequires: libssh2-devel >= 1.3.0
+%endif
+
+%if 0%{?fedora} || 0%{?rhel} >= 7
+BuildRequires: netcf-devel >= 0.2.2
+%else
+BuildRequires: netcf-devel >= 0.1.8
+%endif
+%if %{with_esx}
+BuildRequires: libcurl-devel
+%endif
+%if %{with_hyperv}
+BuildRequires: libwsman-devel >= 2.2.3
+%endif
+BuildRequires: audit-libs-devel
+# we need /usr/sbin/dtrace
+BuildRequires: systemtap-sdt-devel
+
+# For mount/umount in FS driver
+BuildRequires: util-linux
+# For showmount in FS driver (netfs discovery)
+BuildRequires: nfs-utils
+
+# Communication with the firewall and polkit daemons use DBus
+BuildRequires: dbus-devel
+
+# Fedora build root suckage
+BuildRequires: gawk
+
+# For storage wiping with different algorithms
+BuildRequires: scrub
+
+%if %{with_numad}
+BuildRequires: numad
+%endif
+
+%if %{with_wireshark}
+BuildRequires: wireshark-devel >= 2.1.0
+%endif
+
+%if %{with_libssh}
+BuildRequires: libssh-devel >= 0.7.0
+%endif
+
+%if 0%{?fedora} > 27 || 0%{?rhel} > 7
+BuildRequires: rpcgen
+BuildRequires: libtirpc-devel
+%endif
+
+%if %{with_firewalld_zone}
+BuildRequires: firewalld-filesystem
+%endif
+
+Provides: bundled(gnulib)
+
+%description
+Libvirt is a C toolkit to interact with the virtualization capabilities
+of recent versions of Linux (and other OSes). The main package includes
+the libvirtd server exporting the virtualization support.
+
+%package docs
+Summary: API reference and website documentation
+
+%description docs
+Includes the API reference for the libvirt C library, and a complete
+copy of the libvirt.org website documentation.
+
+%package daemon
+Summary: Server side daemon and supporting files for libvirt library
+
+# All runtime requirements for the libvirt package (runtime requrements
+# for subpackages are listed later in those subpackages)
+
+# The client side, i.e. shared libs are in a subpackage
+Requires: %{name}-libs = %{version}-%{release}
+
+# for modprobe of pci devices
+Requires: module-init-tools
+
+# for /sbin/ip & /sbin/tc
+Requires: iproute
+# tc is provided by iproute-tc since at least Fedora 26
+%if 0%{?fedora} || 0%{?rhel} > 7
+Requires: iproute-tc
+%endif
+
+Requires: avahi-libs
+%if 0%{?fedora} || 0%{?rhel} >= 7
+Requires: polkit >= 0.112
+%else
+Requires: polkit >= 0.93
+%endif
+%ifarch %{ix86} x86_64 ia64
+# For virConnectGetSysinfo
+Requires: dmidecode
+%endif
+# For service management
+%if %{with_systemd}
+Requires(post): systemd-units
+Requires(post): systemd-sysv
+Requires(preun): systemd-units
+Requires(postun): systemd-units
+%endif
+%if %{with_numad}
+Requires: numad
+%endif
+# libvirtd depends on 'messagebus' service
+Requires: dbus
+# For uid creation during pre
+Requires(pre): shadow-utils
+
+%description daemon
+Server side daemon required to manage the virtualization capabilities
+of recent versions of Linux. Requires a hypervisor specific sub-RPM
+for specific drivers.
+
+%package daemon-config-network
+Summary: Default configuration files for the libvirtd daemon
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+
+%description daemon-config-network
+Default configuration files for setting up NAT based networking
+
+%package daemon-config-nwfilter
+Summary: Network filter configuration files for the libvirtd daemon
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release}
+
+%description daemon-config-nwfilter
+Network filter configuration files for cleaning guest traffic
+
+%package daemon-driver-network
+Summary: Network driver plugin for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+Requires: dnsmasq >= 2.41
+Requires: radvd
+Requires: iptables
+%if 0%{?rhel} && 0%{?rhel} < 7
+Requires: iptables-ipv6
+%endif
+
+%description daemon-driver-network
+The network driver plugin for the libvirtd daemon, providing
+an implementation of the virtual network APIs using the Linux
+bridge capabilities.
+
+
+%package daemon-driver-nwfilter
+Summary: Nwfilter driver plugin for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+Requires: iptables
+%if 0%{?rhel} && 0%{?rhel} < 7
+Requires: iptables-ipv6
+%endif
+Requires: ebtables
+
+%description daemon-driver-nwfilter
+The nwfilter driver plugin for the libvirtd daemon, providing
+an implementation of the firewall APIs using the ebtables,
+iptables and ip6tables capabilities
+
+
+%package daemon-driver-nodedev
+Summary: Nodedev driver plugin for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+# needed for device enumeration
+%if 0%{?fedora} || 0%{?rhel} >= 7
+Requires: systemd >= 185
+%else
+Requires: udev >= 145
+%endif
+
+%description daemon-driver-nodedev
+The nodedev driver plugin for the libvirtd daemon, providing
+an implementation of the node device APIs using the udev
+capabilities.
+
+
+%package daemon-driver-interface
+Summary: Interface driver plugin for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+%if (0%{?fedora} || 0%{?rhel} >= 7)
+Requires: netcf-libs >= 0.2.2
+%endif
+
+%description daemon-driver-interface
+The interface driver plugin for the libvirtd daemon, providing
+an implementation of the network interface APIs using the
+netcf library
+
+
+%package daemon-driver-secret
+Summary: Secret driver plugin for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+
+%description daemon-driver-secret
+The secret driver plugin for the libvirtd daemon, providing
+an implementation of the secret key APIs.
+
+%package daemon-driver-storage-core
+Summary: Storage driver plugin including base backends for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+Requires: nfs-utils
+# For mkfs
+Requires: util-linux
+%if %{with_qemu}
+# From QEMU RPMs
+Requires: /usr/bin/qemu-img
+%endif
+
+%description daemon-driver-storage-core
+The storage driver plugin for the libvirtd daemon, providing
+an implementation of the storage APIs using files, local disks, LVM, SCSI,
+iSCSI, and multipath storage.
+
+%package daemon-driver-storage-logical
+Summary: Storage driver plugin for lvm volumes
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+Requires: lvm2
+
+%description daemon-driver-storage-logical
+The storage driver backend adding implementation of the storage APIs for block
+volumes using lvm.
+
+
+%package daemon-driver-storage-disk
+Summary: Storage driver plugin for disk
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+Requires: parted
+Requires: device-mapper
+
+%description daemon-driver-storage-disk
+The storage driver backend adding implementation of the storage APIs for block
+volumes using the host disks.
+
+
+%package daemon-driver-storage-scsi
+Summary: Storage driver plugin for local scsi devices
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+
+%description daemon-driver-storage-scsi
+The storage driver backend adding implementation of the storage APIs for scsi
+host devices.
+
+
+%package daemon-driver-storage-iscsi
+Summary: Storage driver plugin for iscsi
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+Requires: iscsi-initiator-utils
+
+%description daemon-driver-storage-iscsi
+The storage driver backend adding implementation of the storage APIs for iscsi
+volumes using the host iscsi stack.
+
+
+%package daemon-driver-storage-mpath
+Summary: Storage driver plugin for multipath volumes
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+Requires: device-mapper
+
+%description daemon-driver-storage-mpath
+The storage driver backend adding implementation of the storage APIs for
+multipath storage using device mapper.
+
+
+%if %{with_storage_gluster}
+%package daemon-driver-storage-gluster
+Summary: Storage driver plugin for gluster
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+    %if 0%{?fedora}
+Requires: glusterfs-client >= 2.0.1
+    %endif
+    %if (0%{?fedora} || 0%{?with_storage_gluster})
+Requires: /usr/sbin/gluster
+    %endif
+
+%description daemon-driver-storage-gluster
+The storage driver backend adding implementation of the storage APIs for gluster
+volumes using libgfapi.
+%endif
+
+
+%if %{with_storage_rbd}
+%package daemon-driver-storage-rbd
+Summary: Storage driver plugin for rbd
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+
+%description daemon-driver-storage-rbd
+The storage driver backend adding implementation of the storage APIs for rbd
+volumes using the ceph protocol.
+%endif
+
+
+%if %{with_storage_sheepdog}
+%package daemon-driver-storage-sheepdog
+Summary: Storage driver plugin for sheepdog
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+Requires: sheepdog
+
+%description daemon-driver-storage-sheepdog
+The storage driver backend adding implementation of the storage APIs for
+sheepdog volumes using.
+%endif
+
+
+%if %{with_storage_zfs}
+%package daemon-driver-storage-zfs
+Summary: Storage driver plugin for ZFS
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+# Support any conforming implementation of zfs
+Requires: /sbin/zfs
+Requires: /sbin/zpool
+
+%description daemon-driver-storage-zfs
+The storage driver backend adding implementation of the storage APIs for
+ZFS volumes.
+%endif
+
+
+%package daemon-driver-storage
+Summary: Storage driver plugin including all backends for the libvirtd daemon
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage-disk = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage-logical = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage-scsi = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage-iscsi = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage-mpath = %{version}-%{release}
+%if %{with_storage_gluster}
+Requires: libvirt-daemon-driver-storage-gluster = %{version}-%{release}
+%endif
+%if %{with_storage_rbd}
+Requires: libvirt-daemon-driver-storage-rbd = %{version}-%{release}
+%endif
+%if %{with_storage_sheepdog}
+Requires: libvirt-daemon-driver-storage-sheepdog = %{version}-%{release}
+%endif
+%if %{with_storage_zfs}
+Requires: libvirt-daemon-driver-storage-zfs = %{version}-%{release}
+%endif
+
+%description daemon-driver-storage
+The storage driver plugin for the libvirtd daemon, providing
+an implementation of the storage APIs using LVM, iSCSI,
+parted and more.
+
+
+%if %{with_qemu}
+%package daemon-driver-qemu
+Summary: QEMU driver plugin for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+# There really is a hard cross-driver dependency here
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
+Requires: /usr/bin/qemu-img
+# For image compression
+Requires: gzip
+Requires: bzip2
+Requires: lzop
+Requires: xz
+    %if 0%{?fedora} || 0%{?rhel} > 7
+Requires: systemd-container
+    %endif
+
+%description daemon-driver-qemu
+The qemu driver plugin for the libvirtd daemon, providing
+an implementation of the hypervisor driver APIs using
+QEMU
+%endif
+
+
+%if %{with_lxc}
+%package daemon-driver-lxc
+Summary: LXC driver plugin for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+# There really is a hard cross-driver dependency here
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+    %if 0%{?fedora} || 0%{?rhel} > 7
+Requires: systemd-container
+    %endif
+
+%description daemon-driver-lxc
+The LXC driver plugin for the libvirtd daemon, providing
+an implementation of the hypervisor driver APIs using
+the Linux kernel
+%endif
+
+
+%if %{with_uml}
+%package daemon-driver-uml
+Summary: Uml driver plugin for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+
+%description daemon-driver-uml
+The UML driver plugin for the libvirtd daemon, providing
+an implementation of the hypervisor driver APIs using
+User Mode Linux
+%endif
+
+
+%if %{with_vbox}
+%package daemon-driver-vbox
+Summary: VirtualBox driver plugin for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+
+%description daemon-driver-vbox
+The vbox driver plugin for the libvirtd daemon, providing
+an implementation of the hypervisor driver APIs using
+VirtualBox
+%endif
+
+
+%if %{with_libxl}
+%package daemon-driver-libxl
+Summary: Libxl driver plugin for the libvirtd daemon
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-libs = %{version}-%{release}
+Obsoletes: libvirt-daemon-driver-xen < 4.3.0
+
+%description daemon-driver-libxl
+The Libxl driver plugin for the libvirtd daemon, providing
+an implementation of the hypervisor driver APIs using
+Libxl
+%endif
+
+
+
+%if %{with_qemu_tcg}
+%package daemon-qemu
+Summary: Server side daemon & driver required to run QEMU guests
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-daemon-driver-qemu = %{version}-%{release}
+Requires: libvirt-daemon-driver-interface = %{version}-%{release}
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+Requires: libvirt-daemon-driver-nodedev = %{version}-%{release}
+Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release}
+Requires: libvirt-daemon-driver-secret = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage = %{version}-%{release}
+Requires: qemu
+
+%description daemon-qemu
+Server side daemon and driver required to manage the virtualization
+capabilities of the QEMU TCG emulators
+%endif
+
+
+%if %{with_qemu_kvm}
+%package daemon-kvm
+Summary: Server side daemon & driver required to run KVM guests
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-daemon-driver-qemu = %{version}-%{release}
+Requires: libvirt-daemon-driver-interface = %{version}-%{release}
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+Requires: libvirt-daemon-driver-nodedev = %{version}-%{release}
+Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release}
+Requires: libvirt-daemon-driver-secret = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage = %{version}-%{release}
+Requires: qemu-kvm
+
+%description daemon-kvm
+Server side daemon and driver required to manage the virtualization
+capabilities of the KVM hypervisor
+%endif
+
+
+%if %{with_lxc}
+%package daemon-lxc
+Summary: Server side daemon & driver required to run LXC guests
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-daemon-driver-lxc = %{version}-%{release}
+Requires: libvirt-daemon-driver-interface = %{version}-%{release}
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+Requires: libvirt-daemon-driver-nodedev = %{version}-%{release}
+Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release}
+Requires: libvirt-daemon-driver-secret = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage = %{version}-%{release}
+
+%description daemon-lxc
+Server side daemon and driver required to manage the virtualization
+capabilities of LXC
+%endif
+
+
+%if %{with_uml}
+%package daemon-uml
+Summary: Server side daemon & driver required to run UML guests
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-daemon-driver-uml = %{version}-%{release}
+Requires: libvirt-daemon-driver-interface = %{version}-%{release}
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+Requires: libvirt-daemon-driver-nodedev = %{version}-%{release}
+Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release}
+Requires: libvirt-daemon-driver-secret = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage = %{version}-%{release}
+# There are no UML kernel RPMs in Fedora/RHEL to depend on.
+
+%description daemon-uml
+Server side daemon and driver required to manage the virtualization
+capabilities of UML
+%endif
+
+
+%if %{with_libxl}
+%package daemon-xen
+Summary: Server side daemon & driver required to run XEN guests
+
+Requires: libvirt-daemon = %{version}-%{release}
+    %if %{with_libxl}
+Requires: libvirt-daemon-driver-libxl = %{version}-%{release}
+    %endif
+Requires: libvirt-daemon-driver-interface = %{version}-%{release}
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+Requires: libvirt-daemon-driver-nodedev = %{version}-%{release}
+Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release}
+Requires: libvirt-daemon-driver-secret = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage = %{version}-%{release}
+Requires: xen
+
+%description daemon-xen
+Server side daemon and driver required to manage the virtualization
+capabilities of XEN
+%endif
+
+%if %{with_vbox}
+%package daemon-vbox
+Summary: Server side daemon & driver required to run VirtualBox guests
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: libvirt-daemon-driver-vbox = %{version}-%{release}
+Requires: libvirt-daemon-driver-interface = %{version}-%{release}
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+Requires: libvirt-daemon-driver-nodedev = %{version}-%{release}
+Requires: libvirt-daemon-driver-nwfilter = %{version}-%{release}
+Requires: libvirt-daemon-driver-secret = %{version}-%{release}
+Requires: libvirt-daemon-driver-storage = %{version}-%{release}
+
+%description daemon-vbox
+Server side daemon and driver required to manage the virtualization
+capabilities of VirtualBox
+%endif
+
+%package client
+Summary: Client side utilities of the libvirt library
+Requires: %{name}-libs = %{version}-%{release}
+Requires: readline
+Requires: ncurses
+# Needed by /usr/libexec/libvirt-guests.sh script.
+Requires: gettext
+# Needed by virt-pki-validate script.
+Requires: gnutls-utils
+%if %{with_pm_utils}
+# Needed for probing the power management features of the host.
+Requires: pm-utils
+%endif
+%if %{with_bash_completion}
+Requires: %{name}-bash-completion = %{version}-%{release}
+%endif
+
+%description client
+The client binaries needed to access the virtualization
+capabilities of recent versions of Linux (and other OSes).
+
+%package libs
+Summary: Client side libraries
+# So remote clients can access libvirt over SSH tunnel
+# (client invokes 'nc' against the UNIX socket on the server)
+Requires: nc
+Requires: cyrus-sasl
+# Needed by default sasl.conf - no onerous extra deps, since
+# 100's of other things on a system already pull in krb5-libs
+Requires: cyrus-sasl-gssapi
+
+%description libs
+Shared libraries for accessing the libvirt daemon.
+
+%package admin
+Summary: Set of tools to control libvirt daemon
+Requires: %{name}-libs = %{version}-%{release}
+Requires: readline
+%if %{with_bash_completion}
+Requires: %{name}-bash-completion = %{version}-%{release}
+%endif
+
+%description admin
+The client side utilities to control the libvirt daemon.
+
+%if %{with_bash_completion}
+%package bash-completion
+Summary: Bash completion script
+
+%description bash-completion
+Bash completion script stub.
+%endif
+
+%if %{with_wireshark}
+%package wireshark
+Summary: Wireshark dissector plugin for libvirt RPC transactions
+Requires: wireshark >= 1.12.6-4
+Requires: %{name}-libs = %{version}-%{release}
+
+%description wireshark
+Wireshark dissector plugin for better analysis of libvirt RPC traffic.
+%endif
+
+%if %{with_lxc}
+%package login-shell
+Summary: Login shell for connecting users to an LXC container
+Requires: %{name}-libs = %{version}-%{release}
+
+%description login-shell
+Provides the set-uid virt-login-shell binary that is used to
+connect a user to an LXC container when they login, by switching
+namespaces.
+%endif
+
+%package devel
+Summary: Libraries, includes, etc. to compile with the libvirt library
+Requires: %{name}-libs = %{version}-%{release}
+Requires: pkgconfig
+
+%description devel
+Include header files & development libraries for the libvirt C library.
+
+%if %{with_sanlock}
+%package lock-sanlock
+Summary: Sanlock lock manager plugin for QEMU driver
+Requires: sanlock >= 2.4
+#for virt-sanlock-cleanup require augeas
+Requires: augeas
+Requires: %{name}-daemon = %{version}-%{release}
+Requires: %{name}-libs = %{version}-%{release}
+
+%description lock-sanlock
+Includes the Sanlock lock manager plugin for the QEMU
+driver
+%endif
+
+%package nss
+Summary: Libvirt plugin for Name Service Switch
+Requires: libvirt-daemon-driver-network = %{version}-%{release}
+
+%description nss
+Libvirt plugin for NSS for translating domain names into IP addresses.
+
+
+%prep
+
+%setup -q
+
+# "make dist" replaces all symlinks with a copy of the linked files;
+# we need to replace all of them with the original symlinks
+echo "Restoring symlinks"
+while read lnk target; do
+    if [ -e $lnk ]; then
+        rm -rf $lnk
+        ln -s $target $lnk
+    fi
+done <%{_sourcedir}/symlinks || exit 1
+
+# Patches have to be stored in a temporary file because RPM has
+# a limit on the length of the result of any macro expansion;
+# if the string is longer, it's silently cropped
+%{lua:
+    tmp = os.tmpname();
+    f = io.open(tmp, "w+");
+    count = 0;
+    for i, p in ipairs(patches) do
+        f:write(p.."\n");
+        count = count + 1;
+    end;
+    f:close();
+    print("PATCHCOUNT="..count.."\n")
+    print("PATCHLIST="..tmp.."\n")
+}
+
+git init -q
+git config user.name rpm-build
+git config user.email rpm-build
+git config gc.auto 0
+git add .
+git commit -q -a --author 'rpm-build <rpm-build>' \
+           -m '%{name}-%{version} base'
+
+COUNT=$(grep '\.patch$' $PATCHLIST | wc -l)
+if [ $COUNT -ne $PATCHCOUNT ]; then
+    echo "Found $COUNT patches in $PATCHLIST, expected $PATCHCOUNT"
+    exit 1
+fi
+if [ $COUNT -gt 0 ]; then
+    xargs git am <$PATCHLIST || exit 1
+fi
+echo "Applied $COUNT patches"
+rm -f $PATCHLIST
+rm -rf .git
+
+%build
+%if ! %{supported_platform}
+echo "This RPM requires either Fedora >= %{min_fedora} or RHEL >= %{min_rhel}"
+exit 1
+%endif
+
+%if %{with_qemu}
+    %define arg_qemu --with-qemu
+%else
+    %define arg_qemu --without-qemu
+%endif
+
+%if %{with_openvz}
+    %define arg_openvz --with-openvz
+%else
+    %define arg_openvz --without-openvz
+%endif
+
+%if %{with_lxc}
+    %define arg_lxc --with-lxc
+    %define arg_login_shell --with-login-shell
+%else
+    %define arg_lxc --without-lxc
+    %define arg_login_shell --without-login-shell
+%endif
+
+%if %{with_vbox}
+    %define arg_vbox --with-vbox
+%else
+    %define arg_vbox --without-vbox
+%endif
+
+%if %{with_libxl}
+    %define arg_libxl --with-libxl
+%else
+    %define arg_libxl --without-libxl
+%endif
+
+%if %{with_phyp}
+    %define arg_phyp --with-phyp
+%else
+    %define arg_phyp --without-phyp
+%endif
+
+%if %{with_esx}
+    %define arg_esx --with-esx
+%else
+    %define arg_esx --without-esx
+%endif
+
+%if %{with_hyperv}
+    %define arg_hyperv --with-hyperv
+%else
+    %define arg_hyperv --without-hyperv
+%endif
+
+%if %{with_vmware}
+    %define arg_vmware --with-vmware
+%else
+    %define arg_vmware --without-vmware
+%endif
+
+%if %{with_uml}
+    %define arg_uml --with-uml
+%else
+    %define arg_uml --without-uml
+%endif
+
+%if %{with_storage_rbd}
+    %define arg_storage_rbd --with-storage-rbd
+%else
+    %define arg_storage_rbd --without-storage-rbd
+%endif
+
+%if %{with_storage_sheepdog}
+    %define arg_storage_sheepdog --with-storage-sheepdog
+%else
+    %define arg_storage_sheepdog --without-storage-sheepdog
+%endif
+
+%if %{with_storage_gluster}
+    %define arg_storage_gluster --with-storage-gluster
+%else
+    %define arg_storage_gluster --without-storage-gluster
+%endif
+
+%if %{with_storage_zfs}
+    %define arg_storage_zfs --with-storage-zfs
+%else
+    %define arg_storage_zfs --without-storage-zfs
+%endif
+
+%if %{with_numactl}
+    %define arg_numactl --with-numactl
+%else
+    %define arg_numactl --without-numactl
+%endif
+
+%if %{with_numad}
+    %define arg_numad --with-numad
+%else
+    %define arg_numad --without-numad
+%endif
+
+%if %{with_fuse}
+    %define arg_fuse --with-fuse
+%else
+    %define arg_fuse --without-fuse
+%endif
+
+%if %{with_sanlock}
+    %define arg_sanlock --with-sanlock
+%else
+    %define arg_sanlock --without-sanlock
+%endif
+
+%if %{with_firewalld}
+    %define arg_firewalld --with-firewalld
+%else
+    %define arg_firewalld --without-firewalld
+%endif
+
+%if %{with_firewalld_zone}
+    %define arg_firewalld_zone --with-firewalld-zone
+%else
+    %define arg_firewalld_zone --without-firewalld-zone
+%endif
+
+%if %{with_wireshark}
+    %define arg_wireshark --with-wireshark-dissector
+%else
+    %define arg_wireshark --without-wireshark-dissector
+%endif
+
+%if %{with_pm_utils}
+    %define arg_pm_utils --with-pm-utils
+%else
+    %define arg_pm_utils --without-pm-utils
+%endif
+
+%define when  %(date +"%%F-%%T")
+%define where %(hostname)
+%define who   %{?packager}%{!?packager:Unknown}
+%define arg_packager --with-packager="%{who}, %{when}, %{where}"
+%define arg_packager_version --with-packager-version="%{release}"
+
+%if %{with_systemd}
+    %define arg_init_script --with-init-script=systemd
+%else
+    %define arg_init_script --with-init-script=redhat
+%endif
+
+%if 0%{?fedora} || 0%{?rhel} >= 7
+    %define arg_selinux_mount --with-selinux-mount="/sys/fs/selinux"
+%else
+    %define arg_selinux_mount --with-selinux-mount="/selinux"
+%endif
+
+%if 0%{?fedora}
+    # Nightly firmware repo x86/OVMF
+    LOADERS="/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd"
+    # Nightly firmware repo aarch64/AAVMF
+    LOADERS="$LOADERS:/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw"
+    # Fedora official x86/OVMF
+    LOADERS="$LOADERS:/usr/share/edk2/ovmf/OVMF_CODE.fd:/usr/share/edk2/ovmf/OVMF_VARS.fd"
+    # Fedora official aarch64/AAVMF
+    LOADERS="$LOADERS:/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw"
+    %define arg_loader_nvram --with-loader-nvram="$LOADERS"
+%endif
+
+# place macros above and build commands below this comment
+
+export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/%{name}.spec)
+
+%if 0%{?enable_autotools}
+ autoreconf -if
+%endif
+
+rm -f po/stamp-po
+%configure %{?arg_qemu} \
+           %{?arg_openvz} \
+           %{?arg_lxc} \
+           %{?arg_vbox} \
+           %{?arg_libxl} \
+           --with-sasl \
+           --with-avahi \
+           --with-polkit \
+           --with-libvirtd \
+           %{?arg_uml} \
+           %{?arg_phyp} \
+           %{?arg_esx} \
+           %{?arg_hyperv} \
+           %{?arg_vmware} \
+           --without-xenapi \
+           --without-vz \
+           --without-bhyve \
+           --with-interface \
+           --with-network \
+           --with-storage-fs \
+           --with-storage-lvm \
+           --with-storage-iscsi \
+           --with-storage-scsi \
+           --with-storage-disk \
+           --with-storage-mpath \
+           %{?arg_storage_rbd} \
+           %{?arg_storage_sheepdog} \
+           %{?arg_storage_gluster} \
+           %{?arg_storage_zfs} \
+           --without-storage-vstorage \
+           %{?arg_numactl} \
+           %{?arg_numad} \
+           --with-capng \
+           %{?arg_fuse} \
+           --with-netcf \
+           --with-selinux \
+           %{?arg_selinux_mount} \
+           --without-apparmor \
+           --without-hal \
+           --with-udev \
+           --with-yajl \
+           %{?arg_sanlock} \
+           --with-libpcap \
+           --with-macvtap \
+           --with-audit \
+           --with-dtrace \
+           --with-driver-modules \
+           %{?arg_firewalld} \
+           %{?arg_firewalld_zone} \
+           %{?arg_wireshark} \
+           %{?arg_pm_utils} \
+           --with-nss-plugin \
+           %{arg_packager} \
+           %{arg_packager_version} \
+           --with-qemu-user=%{qemu_user} \
+           --with-qemu-group=%{qemu_group} \
+           --with-tls-priority=%{tls_priority} \
+           %{?arg_loader_nvram} \
+           %{?enable_werror} \
+           --enable-expensive-tests \
+           %{arg_init_script} \
+           %{?arg_login_shell}
+make %{?_smp_mflags} V=1
+gzip -9 ChangeLog
+
+%install
+rm -fr %{buildroot}
+
+export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/%{name}.spec)
+
+# Avoid using makeinstall macro as it changes prefixes rather than setting
+# DESTDIR. Newer make_install macro would be better but it's not available
+# on RHEL 5, thus we need to expand it here.
+make %{?_smp_mflags} install DESTDIR=%{?buildroot} SYSTEMD_UNIT_DIR=%{_unitdir} V=1
+
+make %{?_smp_mflags} -C examples distclean V=1
+
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/lock-driver/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/lock-driver/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/connection-driver/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/connection-driver/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-backend/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-backend/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-file/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-file/*.a
+%if %{with_wireshark}
+rm -f $RPM_BUILD_ROOT%{wireshark_plugindir}/libvirt.la
+%endif
+
+install -d -m 0755 $RPM_BUILD_ROOT%{_datadir}/lib/libvirt/dnsmasq/
+# We don't want to install /etc/libvirt/qemu/networks in the main %files list
+# because if the admin wants to delete the default network completely, we don't
+# want to end up re-incarnating it on every RPM upgrade.
+install -d -m 0755 $RPM_BUILD_ROOT%{_datadir}/libvirt/networks/
+cp $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml \
+   $RPM_BUILD_ROOT%{_datadir}/libvirt/networks/default.xml
+rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml
+rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
+
+# nwfilter files are installed in /usr/share/libvirt and copied to /etc in %post
+# to avoid verification errors on changed files in /etc
+install -d -m 0755 $RPM_BUILD_ROOT%{_datadir}/libvirt/nwfilter/
+cp -a $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/nwfilter/*.xml \
+    $RPM_BUILD_ROOT%{_datadir}/libvirt/nwfilter/
+# libvirt saves these files with mode 600
+chmod 600 $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/nwfilter/*.xml
+
+# Strip auto-generated UUID - we need it generated per-install
+sed -i -e "/<uuid>/d" $RPM_BUILD_ROOT%{_datadir}/libvirt/networks/default.xml
+%if ! %{with_qemu}
+rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/libvirtd_qemu.aug
+rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug
+%endif
+%find_lang %{name}
+
+%if ! %{with_sanlock}
+rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/libvirt_sanlock.aug
+rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/tests/test_libvirt_sanlock.aug
+%endif
+
+%if ! %{with_lxc}
+rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/libvirtd_lxc.aug
+rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/tests/test_libvirtd_lxc.aug
+%endif
+
+%if ! %{with_qemu}
+rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu.conf
+rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.qemu
+%endif
+%if ! %{with_lxc}
+rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/lxc.conf
+rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.lxc
+%endif
+%if ! %{with_libxl}
+rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/libxl.conf
+rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.libxl
+rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/libvirtd_libxl.aug
+rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/tests/test_libvirtd_libxl.aug
+%endif
+%if ! %{with_uml}
+rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.uml
+%endif
+
+# Copied into libvirt-docs subpackage eventually
+mv $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-%{version} libvirt-docs
+
+%ifarch %{power64} s390x x86_64 ia64 alpha sparc64
+mv $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_probes.stp \
+   $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_probes-64.stp
+
+    %if %{with_qemu}
+mv $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_qemu_probes.stp \
+   $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_qemu_probes-64.stp
+    %endif
+%endif
+
+%check
+cd tests
+# These tests don't current work in a mock build root
+for i in nodeinfotest seclabeltest
+do
+  rm -f $i
+  printf 'int main(void) { return 0; }' > $i.c
+  printf '#!/bin/sh\nexit 0\n' > $i
+  chmod +x $i
+done
+if ! make %{?_smp_mflags} check VIR_TEST_DEBUG=1
+then
+  cat test-suite.log || true
+  exit 1
+fi
+
+%pre daemon
+# 'libvirt' group is just to allow password-less polkit access to
+# libvirtd. The uid number is irrelevant, so we use dynamic allocation
+# described at the above link.
+getent group libvirt >/dev/null || groupadd -r libvirt
+
+exit 0
+
+%post daemon
+
+%if %{with_systemd}
+    %if %{with_systemd_macros}
+        %systemd_post virtlockd.socket virtlockd-admin.socket
+        %systemd_post virtlogd.socket virtlogd-admin.socket
+        %systemd_post libvirtd.service
+    %else
+if [ $1 -eq 1 ] ; then
+    # Initial installation
+    /bin/systemctl enable \
+        virtlockd.socket \
+        virtlockd-admin.socket \
+        virtlogd.socket \
+        virtlogd-admin.socket \
+        libvirtd.service >/dev/null 2>&1 || :
+fi
+    %endif
+%else
+/sbin/chkconfig --add libvirtd
+/sbin/chkconfig --add virtlogd
+/sbin/chkconfig --add virtlockd
+%endif
+
+# request daemon restart in posttrans
+mkdir -p %{_localstatedir}/lib/rpm-state/libvirt || :
+touch %{_localstatedir}/lib/rpm-state/libvirt/restart || :
+
+%preun daemon
+%if %{with_systemd}
+    %if %{with_systemd_macros}
+        %systemd_preun libvirtd.service
+        %systemd_preun virtlogd.socket virtlogd-admin.socket virtlogd.service
+        %systemd_preun virtlockd.socket virtlockd-admin.socket virtlockd.service
+    %else
+if [ $1 -eq 0 ] ; then
+    # Package removal, not upgrade
+    /bin/systemctl --no-reload disable \
+        libvirtd.service \
+        virtlogd.socket \
+        virtlogd-admin.socket \
+        virtlogd.service \
+        virtlockd.socket \
+        virtlockd-admin.socket \
+        virtlockd.service > /dev/null 2>&1 || :
+    /bin/systemctl stop \
+        libvirtd.service \
+        virtlogd.socket \
+        virtlogd-admin.socket \
+        virtlogd.service \
+        virtlockd.socket \
+        virtlockd-admin.socket \
+        virtlockd.service > /dev/null 2>&1 || :
+fi
+    %endif
+%else
+if [ $1 = 0 ]; then
+    /sbin/service libvirtd stop 1>/dev/null 2>&1
+    /sbin/chkconfig --del libvirtd
+    /sbin/service virtlogd stop 1>/dev/null 2>&1
+    /sbin/chkconfig --del virtlogd
+    /sbin/service virtlockd stop 1>/dev/null 2>&1
+    /sbin/chkconfig --del virtlockd
+fi
+%endif
+
+%postun daemon
+%if %{with_systemd}
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+if [ $1 -ge 1 ] ; then
+    /bin/systemctl reload-or-try-restart virtlockd.service >/dev/null 2>&1 || :
+    /bin/systemctl reload-or-try-restart virtlogd.service >/dev/null 2>&1 || :
+fi
+%else
+if [ $1 -ge 1 ]; then
+    /sbin/service virtlockd reload > /dev/null 2>&1 || :
+    /sbin/service virtlogd reload > /dev/null 2>&1 || :
+fi
+%endif
+
+# In upgrade scenario we must explicitly enable virtlockd/virtlogd
+# sockets, if libvirtd is already enabled and start them if
+# libvirtd is running, otherwise you'll get failures to start
+# guests
+%triggerpostun daemon -- libvirt-daemon < 1.3.0
+if [ $1 -ge 1 ] ; then
+%if %{with_systemd}
+    /bin/systemctl is-enabled libvirtd.service 1>/dev/null 2>&1 &&
+        /bin/systemctl enable virtlogd.socket virtlogd-admin.socket || :
+    /bin/systemctl is-active libvirtd.service 1>/dev/null 2>&1 &&
+        /bin/systemctl start virtlogd.socket virtlogd-admin.socket || :
+%else
+    /sbin/chkconfig libvirtd 1>/dev/null 2>&1 &&
+        /sbin/chkconfig virtlogd on || :
+    /sbin/service libvirtd status 1>/dev/null 2>&1 &&
+        /sbin/service virtlogd start || :
+    /sbin/service virtlockd reload > /dev/null 2>&1 || :
+    /sbin/service virtlogd reload > /dev/null 2>&1 || :
+%endif
+fi
+
+%posttrans daemon
+if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
+%if %{with_systemd}
+    /bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
+%else
+    /sbin/service libvirtd condrestart > /dev/null 2>&1 || :
+%endif
+fi
+rm -rf %{_localstatedir}/lib/rpm-state/libvirt || :
+
+%post daemon-driver-network
+%if %{with_firewalld}
+    %firewalld_reload
+%endif
+
+%postun daemon-driver-network
+%if %{with_firewalld}
+    %firewalld_reload
+%endif
+
+%post daemon-config-network
+if test $1 -eq 1 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ; then
+    # see if the network used by default network creates a conflict,
+    # and try to resolve it
+    # NB: 192.168.122.0/24 is used in the default.xml template file;
+    # do not modify any of those values here without also modifying
+    # them in the template.
+    orig_sub=122
+    sub=${orig_sub}
+    nl='
+'
+    routes="${nl}$(ip route show | cut -d' ' -f1)${nl}"
+    case ${routes} in
+      *"${nl}192.168.${orig_sub}.0/24${nl}"*)
+        # there was a match, so we need to look for an unused subnet
+        for new_sub in $(seq 124 254); do
+          case ${routes} in
+          *"${nl}192.168.${new_sub}.0/24${nl}"*)
+            ;;
+          *)
+            sub=$new_sub
+            break;
+            ;;
+          esac
+        done
+        ;;
+      *)
+        ;;
+    esac
+
+    UUID=`/usr/bin/uuidgen`
+    sed -e "s/${orig_sub}/${sub}/g" \
+        -e "s,</name>,</name>\n  <uuid>$UUID</uuid>," \
+         < %{_datadir}/libvirt/networks/default.xml \
+         > %{_sysconfdir}/libvirt/qemu/networks/default.xml
+    ln -s ../default.xml %{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
+
+    # Make sure libvirt picks up the new network defininiton
+    mkdir -p %{_localstatedir}/lib/rpm-state/libvirt || :
+    touch %{_localstatedir}/lib/rpm-state/libvirt/restart || :
+fi
+
+%posttrans daemon-config-network
+if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
+%if %{with_systemd}
+    /bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
+%else
+    /sbin/service libvirtd condrestart > /dev/null 2>&1 || :
+%endif
+fi
+rm -rf %{_localstatedir}/lib/rpm-state/libvirt || :
+
+%post daemon-config-nwfilter
+cp %{_datadir}/libvirt/nwfilter/*.xml %{_sysconfdir}/libvirt/nwfilter/
+# Make sure libvirt picks up the new nwfilter defininitons
+mkdir -p %{_localstatedir}/lib/rpm-state/libvirt || :
+touch %{_localstatedir}/lib/rpm-state/libvirt/restart || :
+
+%posttrans daemon-config-nwfilter
+if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
+%if %{with_systemd}
+    /bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
+%else
+    /sbin/service libvirtd condrestart > /dev/null 2>&1 || :
+%endif
+fi
+rm -rf %{_localstatedir}/lib/rpm-state/libvirt || :
+
+
+%if %{with_systemd}
+%triggerun -- libvirt < 0.9.4
+%{_bindir}/systemd-sysv-convert --save libvirtd >/dev/null 2>&1 ||:
+
+# If the package is allowed to autostart:
+/bin/systemctl --no-reload enable libvirtd.service >/dev/null 2>&1 ||:
+
+# Run these because the SysV package being removed won't do them
+/sbin/chkconfig --del libvirtd >/dev/null 2>&1 || :
+/bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
+%endif
+
+%if %{with_qemu}
+%pre daemon-driver-qemu
+# We want soft static allocation of well-known ids, as disk images
+# are commonly shared across NFS mounts by id rather than name; see
+# https://fedoraproject.org/wiki/Packaging:UsersAndGroups
+getent group kvm >/dev/null || groupadd -f -g 36 -r kvm
+getent group qemu >/dev/null || groupadd -f -g 107 -r qemu
+if ! getent passwd qemu >/dev/null; then
+  if ! getent passwd 107 >/dev/null; then
+    useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin -c "qemu user" qemu
+  else
+    useradd -r -g qemu -G kvm -d / -s /sbin/nologin -c "qemu user" qemu
+  fi
+fi
+exit 0
+%endif
+
+%preun client
+
+%if %{with_systemd}
+    %if %{with_systemd_macros}
+        %systemd_preun libvirt-guests.service
+    %endif
+%else
+if [ $1 = 0 ]; then
+    /sbin/chkconfig --del libvirt-guests
+    rm -f /var/lib/libvirt/libvirt-guests
+fi
+%endif
+
+%post client
+
+/sbin/ldconfig
+%if %{with_systemd}
+    %if %{with_systemd_macros}
+        %systemd_post libvirt-guests.service
+    %endif
+%else
+/sbin/chkconfig --add libvirt-guests
+%endif
+
+%postun client
+
+/sbin/ldconfig
+%if %{with_systemd}
+    %if %{with_systemd_macros}
+        %systemd_postun libvirt-guests.service
+    %endif
+%triggerun client -- libvirt < 0.9.4
+%{_bindir}/systemd-sysv-convert --save libvirt-guests >/dev/null 2>&1 ||:
+
+# If the package is allowed to autostart:
+/bin/systemctl --no-reload enable libvirt-guests.service >/dev/null 2>&1 ||:
+
+# Run this because the SysV package being removed won't do them
+/sbin/chkconfig --del libvirt-guests >/dev/null 2>&1 || :
+%endif
+
+%if %{with_sanlock}
+%post lock-sanlock
+if getent group sanlock > /dev/null ; then
+    chmod 0770 %{_localstatedir}/lib/libvirt/sanlock
+    chown root:sanlock %{_localstatedir}/lib/libvirt/sanlock
+fi
+%endif
+
+%if %{with_lxc}
+%pre login-shell
+getent group virtlogin >/dev/null || groupadd -r virtlogin
+exit 0
+%endif
+
+%files
+
+%files docs
+%doc AUTHORS ChangeLog.gz NEWS README README.md
+%doc libvirt-docs/*
+
+# API docs
+%dir %{_datadir}/gtk-doc/html/libvirt/
+%doc %{_datadir}/gtk-doc/html/libvirt/*.devhelp
+%doc %{_datadir}/gtk-doc/html/libvirt/*.html
+%doc %{_datadir}/gtk-doc/html/libvirt/*.png
+%doc %{_datadir}/gtk-doc/html/libvirt/*.css
+%doc examples/hellolibvirt
+%doc examples/object-events
+%doc examples/dominfo
+%doc examples/domsuspend
+%doc examples/dommigrate
+%doc examples/openauth
+%doc examples/xml
+%doc examples/rename
+%doc examples/systemtap
+%doc examples/admin
+
+
+%files daemon
+
+%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/
+
+%if %{with_systemd}
+%{_unitdir}/libvirtd.service
+%{_unitdir}/virt-guest-shutdown.target
+%{_unitdir}/virtlogd.service
+%{_unitdir}/virtlogd.socket
+%{_unitdir}/virtlogd-admin.socket
+%{_unitdir}/virtlockd.service
+%{_unitdir}/virtlockd.socket
+%{_unitdir}/virtlockd-admin.socket
+%else
+%{_sysconfdir}/rc.d/init.d/libvirtd
+%{_sysconfdir}/rc.d/init.d/virtlogd
+%{_sysconfdir}/rc.d/init.d/virtlockd
+%endif
+%config(noreplace) %{_sysconfdir}/sysconfig/libvirtd
+%config(noreplace) %{_sysconfdir}/sysconfig/virtlogd
+%config(noreplace) %{_sysconfdir}/sysconfig/virtlockd
+%config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf
+%config(noreplace) %{_sysconfdir}/libvirt/virtlogd.conf
+%config(noreplace) %{_sysconfdir}/libvirt/virtlockd.conf
+%config(noreplace) %{_sysconfdir}/sasl2/libvirt.conf
+%config(noreplace) %{_prefix}/lib/sysctl.d/60-libvirtd.conf
+
+%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd
+%dir %{_datadir}/libvirt/
+
+%ghost %dir %{_localstatedir}/run/libvirt/
+
+%dir %attr(0711, root, root) %{_localstatedir}/lib/libvirt/images/
+%dir %attr(0711, root, root) %{_localstatedir}/lib/libvirt/filesystems/
+%dir %attr(0711, root, root) %{_localstatedir}/lib/libvirt/boot/
+%dir %attr(0711, root, root) %{_localstatedir}/cache/libvirt/
+
+
+%dir %attr(0755, root, root) %{_libdir}/libvirt/
+%dir %attr(0755, root, root) %{_libdir}/libvirt/connection-driver/
+%dir %attr(0755, root, root) %{_libdir}/libvirt/lock-driver
+%attr(0755, root, root) %{_libdir}/libvirt/lock-driver/lockd.so
+
+%{_datadir}/augeas/lenses/libvirtd.aug
+%{_datadir}/augeas/lenses/tests/test_libvirtd.aug
+%{_datadir}/augeas/lenses/virtlogd.aug
+%{_datadir}/augeas/lenses/tests/test_virtlogd.aug
+%{_datadir}/augeas/lenses/virtlockd.aug
+%{_datadir}/augeas/lenses/tests/test_virtlockd.aug
+%{_datadir}/augeas/lenses/libvirt_lockd.aug
+%if %{with_qemu}
+%{_datadir}/augeas/lenses/tests/test_libvirt_lockd.aug
+%endif
+
+%{_datadir}/polkit-1/actions/org.libvirt.unix.policy
+%{_datadir}/polkit-1/actions/org.libvirt.api.policy
+%{_datadir}/polkit-1/rules.d/50-libvirt.rules
+
+%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/
+
+%attr(0755, root, root) %{_libexecdir}/libvirt_iohelper
+
+%attr(0755, root, root) %{_sbindir}/libvirtd
+%attr(0755, root, root) %{_sbindir}/virtlogd
+%attr(0755, root, root) %{_sbindir}/virtlockd
+
+%{_mandir}/man8/libvirtd.8*
+%{_mandir}/man8/virtlogd.8*
+%{_mandir}/man8/virtlockd.8*
+%{_mandir}/man7/virkey*.7*
+
+%doc examples/polkit/*.rules
+
+%files daemon-config-network
+%dir %{_datadir}/libvirt/networks/
+%{_datadir}/libvirt/networks/default.xml
+
+%files daemon-config-nwfilter
+%dir %{_datadir}/libvirt/nwfilter/
+%{_datadir}/libvirt/nwfilter/*.xml
+%ghost %{_sysconfdir}/libvirt/nwfilter/*.xml
+
+%files daemon-driver-interface
+%{_libdir}/%{name}/connection-driver/libvirt_driver_interface.so
+
+%files daemon-driver-network
+%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/
+%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/
+%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/autostart
+%ghost %dir %{_localstatedir}/run/libvirt/network/
+%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/network/
+%dir %attr(0755, root, root) %{_localstatedir}/lib/libvirt/dnsmasq/
+%attr(0755, root, root) %{_libexecdir}/libvirt_leaseshelper
+%{_libdir}/%{name}/connection-driver/libvirt_driver_network.so
+
+%if %{with_firewalld_zone}
+%{_prefix}/lib/firewalld/zones/libvirt.xml
+%endif
+
+%files daemon-driver-nodedev
+%{_libdir}/%{name}/connection-driver/libvirt_driver_nodedev.so
+
+%files daemon-driver-nwfilter
+%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/nwfilter/
+%ghost %dir %{_localstatedir}/run/libvirt/network/
+%{_libdir}/%{name}/connection-driver/libvirt_driver_nwfilter.so
+
+%files daemon-driver-secret
+%{_libdir}/%{name}/connection-driver/libvirt_driver_secret.so
+
+%files daemon-driver-storage
+
+%files daemon-driver-storage-core
+%attr(0755, root, root) %{_libexecdir}/libvirt_parthelper
+%{_libdir}/%{name}/connection-driver/libvirt_driver_storage.so
+%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_fs.so
+%{_libdir}/%{name}/storage-file/libvirt_storage_file_fs.so
+
+%files daemon-driver-storage-disk
+%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_disk.so
+
+%files daemon-driver-storage-logical
+%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_logical.so
+
+%files daemon-driver-storage-scsi
+%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_scsi.so
+
+%files daemon-driver-storage-iscsi
+%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_iscsi.so
+
+%files daemon-driver-storage-mpath
+%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_mpath.so
+
+%if %{with_storage_gluster}
+%files daemon-driver-storage-gluster
+%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_gluster.so
+%{_libdir}/%{name}/storage-file/libvirt_storage_file_gluster.so
+%endif
+
+%if %{with_storage_rbd}
+%files daemon-driver-storage-rbd
+%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_rbd.so
+%endif
+
+%if %{with_storage_sheepdog}
+%files daemon-driver-storage-sheepdog
+%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_sheepdog.so
+%endif
+
+%if %{with_storage_zfs}
+%files daemon-driver-storage-zfs
+%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_zfs.so
+%endif
+
+%if %{with_qemu}
+%files daemon-driver-qemu
+%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/
+%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/
+%config(noreplace) %{_sysconfdir}/libvirt/qemu.conf
+%config(noreplace) %{_sysconfdir}/libvirt/qemu-lockd.conf
+%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.qemu
+%ghost %dir %attr(0700, root, root) %{_localstatedir}/run/libvirt/qemu/
+%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/
+%dir %attr(0750, %{qemu_user}, %{qemu_group}) %{_localstatedir}/cache/libvirt/qemu/
+%{_datadir}/augeas/lenses/libvirtd_qemu.aug
+%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug
+%{_libdir}/%{name}/connection-driver/libvirt_driver_qemu.so
+%dir %attr(0711, root, root) %{_localstatedir}/lib/libvirt/swtpm/
+%dir %attr(0711, root, root) %{_localstatedir}/log/swtpm/libvirt/qemu/
+%endif
+
+%if %{with_lxc}
+%files daemon-driver-lxc
+%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/lxc/
+%config(noreplace) %{_sysconfdir}/libvirt/lxc.conf
+%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.lxc
+%ghost %dir %{_localstatedir}/run/libvirt/lxc/
+%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/lxc/
+%{_datadir}/augeas/lenses/libvirtd_lxc.aug
+%{_datadir}/augeas/lenses/tests/test_libvirtd_lxc.aug
+%attr(0755, root, root) %{_libexecdir}/libvirt_lxc
+%{_libdir}/%{name}/connection-driver/libvirt_driver_lxc.so
+%endif
+
+%if %{with_uml}
+%files daemon-driver-uml
+%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/uml/
+%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.uml
+%ghost %dir %{_localstatedir}/run/libvirt/uml/
+%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/uml/
+%{_libdir}/%{name}/connection-driver/libvirt_driver_uml.so
+%endif
+
+%if %{with_libxl}
+%files daemon-driver-libxl
+%config(noreplace) %{_sysconfdir}/libvirt/libxl.conf
+%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.libxl
+%config(noreplace) %{_sysconfdir}/libvirt/libxl-lockd.conf
+%{_datadir}/augeas/lenses/libvirtd_libxl.aug
+%{_datadir}/augeas/lenses/tests/test_libvirtd_libxl.aug
+%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/libxl/
+%ghost %dir %{_localstatedir}/run/libvirt/libxl/
+%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/libxl/
+%{_libdir}/%{name}/connection-driver/libvirt_driver_libxl.so
+%endif
+
+%if %{with_vbox}
+%files daemon-driver-vbox
+%{_libdir}/%{name}/connection-driver/libvirt_driver_vbox.so
+%endif
+
+%if %{with_qemu_tcg}
+%files daemon-qemu
+%endif
+
+%if %{with_qemu_kvm}
+%files daemon-kvm
+%endif
+
+%if %{with_lxc}
+%files daemon-lxc
+%endif
+
+%if %{with_uml}
+%files daemon-uml
+%endif
+
+%if %{with_libxl}
+%files daemon-xen
+%endif
+
+%if %{with_vbox}
+%files daemon-vbox
+%endif
+
+%if %{with_sanlock}
+%files lock-sanlock
+    %if %{with_qemu}
+%config(noreplace) %{_sysconfdir}/libvirt/qemu-sanlock.conf
+    %endif
+    %if %{with_libxl}
+%config(noreplace) %{_sysconfdir}/libvirt/libxl-sanlock.conf
+    %endif
+%attr(0755, root, root) %{_libdir}/libvirt/lock-driver/sanlock.so
+%{_datadir}/augeas/lenses/libvirt_sanlock.aug
+%{_datadir}/augeas/lenses/tests/test_libvirt_sanlock.aug
+%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/sanlock
+%{_sbindir}/virt-sanlock-cleanup
+%{_mandir}/man8/virt-sanlock-cleanup.8*
+%attr(0755, root, root) %{_libexecdir}/libvirt_sanlock_helper
+%endif
+
+%files client
+%{_mandir}/man1/virsh.1*
+%{_mandir}/man1/virt-xml-validate.1*
+%{_mandir}/man1/virt-pki-validate.1*
+%{_mandir}/man1/virt-host-validate.1*
+%{_bindir}/virsh
+%{_bindir}/virt-xml-validate
+%{_bindir}/virt-pki-validate
+%{_bindir}/virt-host-validate
+
+%{_datadir}/systemtap/tapset/libvirt_probes*.stp
+%{_datadir}/systemtap/tapset/libvirt_functions.stp
+%if %{with_qemu}
+%{_datadir}/systemtap/tapset/libvirt_qemu_probes*.stp
+%endif
+
+%if %{with_bash_completion}
+%{_datadir}/bash-completion/completions/virsh
+%endif
+
+
+%if %{with_systemd}
+%{_unitdir}/libvirt-guests.service
+%else
+%{_sysconfdir}/rc.d/init.d/libvirt-guests
+%endif
+%config(noreplace) %{_sysconfdir}/sysconfig/libvirt-guests
+%attr(0755, root, root) %{_libexecdir}/libvirt-guests.sh
+
+%files libs -f %{name}.lang
+# RHEL6 doesn't have 'license' macro
+%{!?_licensedir:%global license %%doc}
+%license COPYING COPYING.LESSER
+%config(noreplace) %{_sysconfdir}/libvirt/libvirt.conf
+%config(noreplace) %{_sysconfdir}/libvirt/libvirt-admin.conf
+%{_libdir}/libvirt.so.*
+%{_libdir}/libvirt-qemu.so.*
+%{_libdir}/libvirt-lxc.so.*
+%{_libdir}/libvirt-admin.so.*
+%dir %{_datadir}/libvirt/
+%dir %{_datadir}/libvirt/schemas/
+%dir %attr(0755, root, root) %{_localstatedir}/lib/libvirt/
+
+%{_datadir}/libvirt/schemas/basictypes.rng
+%{_datadir}/libvirt/schemas/capability.rng
+%{_datadir}/libvirt/schemas/cputypes.rng
+%{_datadir}/libvirt/schemas/domain.rng
+%{_datadir}/libvirt/schemas/domaincaps.rng
+%{_datadir}/libvirt/schemas/domaincommon.rng
+%{_datadir}/libvirt/schemas/domainsnapshot.rng
+%{_datadir}/libvirt/schemas/interface.rng
+%{_datadir}/libvirt/schemas/network.rng
+%{_datadir}/libvirt/schemas/networkcommon.rng
+%{_datadir}/libvirt/schemas/nodedev.rng
+%{_datadir}/libvirt/schemas/nwfilter.rng
+%{_datadir}/libvirt/schemas/nwfilter_params.rng
+%{_datadir}/libvirt/schemas/nwfilterbinding.rng
+%{_datadir}/libvirt/schemas/secret.rng
+%{_datadir}/libvirt/schemas/storagecommon.rng
+%{_datadir}/libvirt/schemas/storagepool.rng
+%{_datadir}/libvirt/schemas/storagevol.rng
+
+%{_datadir}/libvirt/cpu_map.xml
+
+%{_datadir}/libvirt/test-screenshot.png
+
+%files admin
+%{_mandir}/man1/virt-admin.1*
+%{_bindir}/virt-admin
+%if %{with_bash_completion}
+%{_datadir}/bash-completion/completions/virt-admin
+%endif
+
+%if %{with_bash_completion}
+%files bash-completion
+%{_datadir}/bash-completion/completions/vsh
+%endif
+
+%if %{with_wireshark}
+%files wireshark
+%{wireshark_plugindir}/libvirt.so
+%endif
+
+%files nss
+%{_libdir}/libnss_libvirt.so.2
+%{_libdir}/libnss_libvirt_guest.so.2
+
+%if %{with_lxc}
+%files login-shell
+%attr(4750, root, virtlogin) %{_bindir}/virt-login-shell
+%config(noreplace) %{_sysconfdir}/libvirt/virt-login-shell.conf
+%{_mandir}/man1/virt-login-shell.1*
+%endif
+
+%files devel
+%{_libdir}/libvirt.so
+%{_libdir}/libvirt-admin.so
+%{_libdir}/libvirt-qemu.so
+%{_libdir}/libvirt-lxc.so
+%dir %{_includedir}/libvirt
+%{_includedir}/libvirt/virterror.h
+%{_includedir}/libvirt/libvirt.h
+%{_includedir}/libvirt/libvirt-admin.h
+%{_includedir}/libvirt/libvirt-common.h
+%{_includedir}/libvirt/libvirt-domain.h
+%{_includedir}/libvirt/libvirt-domain-snapshot.h
+%{_includedir}/libvirt/libvirt-event.h
+%{_includedir}/libvirt/libvirt-host.h
+%{_includedir}/libvirt/libvirt-interface.h
+%{_includedir}/libvirt/libvirt-network.h
+%{_includedir}/libvirt/libvirt-nodedev.h
+%{_includedir}/libvirt/libvirt-nwfilter.h
+%{_includedir}/libvirt/libvirt-secret.h
+%{_includedir}/libvirt/libvirt-storage.h
+%{_includedir}/libvirt/libvirt-stream.h
+%{_includedir}/libvirt/libvirt-qemu.h
+%{_includedir}/libvirt/libvirt-lxc.h
+%{_libdir}/pkgconfig/libvirt.pc
+%{_libdir}/pkgconfig/libvirt-admin.pc
+%{_libdir}/pkgconfig/libvirt-qemu.pc
+%{_libdir}/pkgconfig/libvirt-lxc.pc
+
+%dir %{_datadir}/libvirt/api/
+%{_datadir}/libvirt/api/libvirt-api.xml
+%{_datadir}/libvirt/api/libvirt-admin-api.xml
+%{_datadir}/libvirt/api/libvirt-qemu-api.xml
+%{_datadir}/libvirt/api/libvirt-lxc-api.xml
+# Needed building python bindings
+%doc docs/libvirt-api.xml
+
+
+%changelog
+* Fri Feb 15 2019 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-23
+- network: explicitly allow icmp/icmpv6 in libvirt zonefile (rhbz#1650320)
+
+* Fri Feb 15 2019 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-22
+- util: fix memory leak in virFirewallDInterfaceSetZone() (rhbz#1650320)
+
+* Fri Feb  8 2019 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-21
+- docs: Drop /dev/net/tun from the list of shared devices (rhbz#1665400)
+- qemu: conf: Remove /dev/sev from the default cgroup device acl list (rhbz#1665400)
+- qemu: cgroup: Expose /dev/sev/ only to domains that require SEV (rhbz#1665400)
+- qemu: domain: Add /dev/sev into the domain mount namespace selectively (rhbz#1665400)
+- security: dac: Relabel /dev/sev in the namespace (rhbz#1665400)
+- qemu: caps: Use CAP_DAC_OVERRIDE for probing to avoid permission issues (rhbz#1665400)
+- qemu: caps: Don't try to ask for CAP_DAC_OVERRIDE if non-root (rhbz#1665400)
+- Revert "RHEL: Require firewalld-filesystem for firewalld rpm macros" (rhbz#1650320)
+- Revert "RHEL: network: regain guest network connectivity after firewalld switch to nftables" (rhbz#1650320)
+- configure: change HAVE_FIREWALLD to WITH_FIREWALLD (rhbz#1650320)
+- util: move all firewalld-specific stuff into its own files (rhbz#1650320)
+- util: new virFirewallD APIs + docs (rhbz#1650320)
+- configure: selectively install a firewalld 'libvirt' zone (rhbz#1650320)
+- network: set firewalld zone of bridges to "libvirt" zone when appropriate (rhbz#1650320)
+- network: allow configuring firewalld zone for virtual network bridge device (rhbz#1650320)
+- util: remove test code accidentally committed to virFirewallDZoneExists (rhbz#1650320)
+- qemu: command: Don't skip 'readonly' and throttling info for empty drive (rhbz#1670337)
+
+* Mon Jan 28 2019 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-20
+- RHEL: qemu: Fix crash trying to use iSCSI hostdev (rhbz#1669424)
+
+* Thu Jan 24 2019 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-19
+- qemu: Fix logic error in qemuSetUnprivSGIO (rhbz#1666605)
+- tests: qemuxml2argv: Add test case for empty CDROM with cache mode (rhbz#1553255)
+- qemu: command: Don't format image properties for empty -drive (rhbz#1553255)
+
+* Mon Jan 14 2019 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-18
+- conf: correct false boot order error during domain parse (rhbz#1630393)
+- qemu: Remove duplicated qemuAgentCheckError (rhbz#1665000)
+- qemu: require reply from guest agent in qemuAgentGetInterfaces (rhbz#1665000)
+- qemu: Filter non SCSI hostdevs in qemuHostdevPrepareSCSIDevices (rhbz#1665244)
+- util: remove const specifier from nlmsghdr arg to virNetlinkDumpCallback() (rhbz#1583131)
+- util: add a function to insert new interfaces to IPv6CheckForwarding list (rhbz#1583131)
+- util: use nlmsg_find_attr() instead of an open-coded loop (rhbz#1583131)
+- util: check accept_ra for all nexthop interfaces of multipath routes (rhbz#1583131)
+- util: make forgotten changes suggested during review of commit d40b820c (rhbz#1583131)
+
+* Mon Jan  7 2019 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-17
+- virsh: Strip XML declaration when extracting CPU XMLs (rhbz#1659048)
+- RHEL: qemu: Add ability to set sgio values for hostdev (rhbz#1582424)
+- RHEL: qemu: Add check for unpriv sgio for SCSI generic host device (rhbz#1582424)
+- qemu: Alter @val usage in qemuSetUnprivSGIO (rhbz#1656362)
+- qemu: Alter qemuSetUnprivSGIO hostdev shareable logic (rhbz#1656362)
+
+* Mon Dec 17 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-16
+- util: Don't overflow in virRandomBits (rhbz#1655586)
+- virrandom: Avoid undefined behaviour in virRandomBits (rhbz#1655586)
+- spec: remove libcgroup and cgconfig (rhbz#1602407)
+- qemu: Drop duplicated code from qemuDomainDefValidateFeatures() (rhbz#1647822)
+- tests: Add capabilities data for QEMU 3.1.0 on ppc64 (rhbz#1647822)
+- qemu: Introduce QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV (rhbz#1647822)
+- conf: Parse and format nested-hv feature (rhbz#1647822)
+- qemu: Format nested-hv feature on the command line (rhbz#1647822)
+- qemu: Add check for whether KVM nesting is enabled (rhbz#1645139)
+- secret: Add check/validation for correct usage when LookupByUUID (rhbz#1656255)
+- cpu: Add support for "stibp" x86_64 feature (rhbz#1655032)
+
+* Mon Dec  3 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-15
+- virfile: Take symlink into account in virFileIsSharedFixFUSE (rhbz#1634782)
+- qemu: Ignore nwfilter binding instantiation issues during reconnect (rhbz#1648544)
+- qemu: Set identity for the reconnect all thread (rhbz#1648546)
+- Revert "access: Modify the VIR_ERR_ACCESS_DENIED to include driverName" (rhbz#1631608)
+- access: Modify the VIR_ERR_ACCESS_DENIED to include driverName (rhbz#1631608)
+- qemu: add vfio-ap capability (rhbz#1508146)
+- qemu: vfio-ap device support (rhbz#1508146)
+- qemu: Extract MDEV VFIO PCI validation code into a separate helper (rhbz#1508146)
+- conf: Move VFIO AP validation from post parse to QEMU validation code (rhbz#1508146)
+- qemu: Fix post-copy migration on the source (rhbz#1649169)
+
+* Fri Nov  9 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-14
+- storage: Remove secretPath from _virStorageBackendQemuImgInfo (rhbz#1645459)
+- storage: Allow for inputvol to have any format for encryption (rhbz#1645459)
+- storage: Allow inputvol to be encrypted (rhbz#1645459)
+- access: Modify the VIR_ERR_ACCESS_DENIED to include driverName (rhbz#1631608)
+- docs: Enhance polkit documentation to describe secondary connection (rhbz#1631608)
+- qemu: Don't ignore resume events (rhbz#1634758, rhbz#1643338)
+
+* Thu Nov  1 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-13
+- Revert "spec: Temporarily drop gluster support" (rhbz#1599339)
+
+* Wed Oct 17 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-12
+- RHEL: Require firewalld-filesystem for firewalld rpm macros (rhbz#1639932)
+
+* Tue Oct 16 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-11
+- virfile: fix cast-align error (rhbz#1634782)
+- virfiletest: Fix test name prefix for virFileInData test (rhbz#1634782)
+- virfiletst: Test virFileIsSharedFS (rhbz#1634782)
+- virFileIsSharedFSType: Detect direct mount points (rhbz#1634782)
+- virfile: Rework virFileIsSharedFixFUSE (rhbz#1634782)
+- RHEL: network: regain guest network connectivity after firewalld switch to nftables (rhbz#1638864)
+
+* Mon Oct  8 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-10
+- conf: Fix check for chardev source path (rhbz#1609723)
+- tests: Reuse qemucapabilities data for qemucaps2xml (rhbz#1629862)
+- tests: Add more tests to qemucaps2xml (rhbz#1629862)
+- qemu: Drop QEMU_CAPS_ENABLE_KVM (rhbz#1629862)
+- qemu: Avoid probing non-native binaries all the time (rhbz#1629862)
+- qemu: Clarify QEMU_CAPS_KVM (rhbz#1629862)
+- qemu: Don't check for /dev/kvm presence (rhbz#1629862)
+- tests: Follow up on qemucaps2xmldata rename (rhbz#1629862)
+- security: dac: also label listen UNIX sockets (rhbz#1634775)
+- spec: Set correct TLS priority (rhbz#1632269)
+- spec: Build ceph and gluster support everywhere (rhbz#1599546)
+- virsh: Require explicit --domain for domxml-to-native (rhbz#1634769)
+- virFileIsSharedFSType: Check for fuse.glusterfs too (rhbz#1634782)
+- qemu: fix up permissions for pre-created UNIX sockets (rhbz#1634775)
+- cpu_map: Add features for Icelake CPUs (rhbz#1527657, rhbz#1526625)
+- cpu_map: Add Icelake CPU models (rhbz#1526625)
+- qemu: Properly report VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT (rhbz#1634758)
+- qemu: Report more appropriate running reasons (rhbz#1634758)
+- qemu: Pass running reason to RESUME event handler (rhbz#1634758)
+- qemu: Map running reason to resume event detail (rhbz#1634758)
+- qemu: Avoid duplicate resume events and state changes (rhbz#1634758)
+- conf: qemu: add support for Hyper-V frequency MSRs (rhbz#1589702)
+- conf: qemu: add support for Hyper-V reenlightenment notifications (rhbz#1589702)
+- conf: qemu: add support for Hyper-V PV TLB flush (rhbz#1589702)
+
+* Wed Sep  5 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-9
+- RHEL: Fix virConnectGetMaxVcpus output (rhbz#1582222)
+- storage: Add --shrink to qemu-img command when shrinking vol (rhbz#1622534)
+- access: Fix nwfilter-binding ACL access API name generation (rhbz#1622540)
+- conf: Add validation of input devices (rhbz#1591240)
+- tests: qemu: Remove disk from graphics-vnc-tls (rhbz#1598167)
+- tests: qemu: test more versions for graphics-vnc-tls (rhbz#1598167)
+- qemu: vnc: switch to tls-creds-x509 (rhbz#1598167)
+- qemu: mdev: Use vfio-pci 'display' property only with vfio-pci mdevs (rhbz#1624740)
+- virDomainDefCompatibleDevice: Relax alias change check (rhbz#1603133)
+- virDomainDetachDeviceFlags: Clarify update semantics (rhbz#1603133)
+- virDomainNetDefCheckABIStability: Check for MTU change too (rhbz#1623158)
+- RHEL: spec: Require python3-devel on RHEL-8 (rhbz#1518446)
+- qemu: monitor: Remove qemuMonitorJSONExtractCPUArchInfo wrapper (rhbz#1598829)
+- qemu: monitor: Use 'target' instead of 'arch' in reply of 'query-cpus-fast' (rhbz#1598829)
+
+* Tue Aug 21 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-8
+- tests: Add missing thread_siblings_list files (rhbz#1608479)
+- util: Rewrite virHostCPUCountThreadSiblings() (rhbz#1608479)
+- utils: Remove arbitrary limit on socket_id/core_id (rhbz#1608479)
+- tests: Add linux-high-ids test (rhbz#1608479)
+- qemu: hotplug: Fix asynchronous unplug of 'shmem' (rhbz#1618680)
+- tests: rename hugepages to hugepages-default (rhbz#1615461)
+- tests: extract hugepages-numa-default-dimm out of hugepages-numa (rhbz#1615461)
+- tests: rename hugepages-numa into hugepages-numa-default (rhbz#1615461)
+- tests: remove unnecessary XML elements from hugepages-numa-default (rhbz#1615461)
+- tests: extract pages-discard out of hugepages-pages (rhbz#1615461)
+- tests: rename hugepages-pages into hugepages-numa-nodeset (rhbz#1615461)
+- tests: rename hugepages-pages2 into hugepages-numa-default-2M (rhbz#1615461)
+- tests: extract pages-discard-hugepages out of hugepages-pages3 (rhbz#1615461)
+- tests: rename hugepages-pages3 into hugepages-numa-nodeset-part (rhbz#1615461)
+- tests: rename hugepages-pages4 into hugepages-numa-nodeset-nonexist (rhbz#1615461)
+- tests: rename hugepages-pages5 into hugepages-default-2M (rhbz#1615461)
+- tests: rename hugepages-pages6 into hugepages-default-system-size (rhbz#1615461)
+- tests: rename hugepages-pages7 into pages-dimm-discard (rhbz#1615461)
+- tests: rename hugepages-pages8 into hugepages-nodeset-nonexist (rhbz#1615461)
+- tests: introduce hugepages-default-1G-nodeset-2M (rhbz#1615461)
+- tests: introduce hugepages-nodeset (rhbz#1615461)
+- conf: Move hugepage XML validation check out of qemu_command (rhbz#1615461)
+- conf: Move hugepages validation out of XML parser (rhbz#1615461)
+- conf: Introduce virDomainDefPostParseMemtune (rhbz#1615461)
+- tests: sev: Test launch-security with specific QEMU version (rhbz#1619150)
+- qemu: Fix probing of AMD SEV support (rhbz#1619150)
+- qemu: caps: Format SEV platform data into qemuCaps cache (rhbz#1619150)
+- conf: Parse guestfwd channel device info again (rhbz#1610072)
+
+* Thu Aug 16 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-7
+- qemu_migration: Avoid writing to freed memory (rhbz#1615854)
+
+* Thu Aug  2 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-6
+- qemu: Exempt video model 'none' from getting a PCI address on Q35
+- conf: Fix a error msg typo in virDomainVideoDefValidate
+
+* Tue Jul 31 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-5
+- esx storage: Fix typo lsilogic -> lsiLogic
+- networkGetDHCPLeases: Don't always report error if unable to read leases file
+- nwfilter: Resolve SEGV for NWFilter Snoop processing
+- qemu: Remove unused bypassSecurityDriver from qemuOpenFileAs
+- qemuDomainSaveMemory: Don't enforce dynamicOwnership
+- domain_nwfilter: Return early if net has no name in virDomainConfNWFilterTeardownImpl
+- examples: Add clean-traffic-gateway into nwfilters
+
+* Mon Jul 23 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-4
+- qemu: hotplug: don't overwrite error message in qemuDomainAttachNetDevice
+- qemu: hotplug: report error when changing rom enabled attr for net iface
+- qemu: Fix setting global_period cputune element
+- tests: qemucaps: Add test data for upcoming qemu 3.0.0
+- qemu: capabilities: Add capability for werror/rerror for 'usb-device' frontend
+- qemu: command: Move graphics iteration to its own function
+- qemu: address: Handle all the video devices within a single loop
+- conf: Introduce virDomainVideoDefClear helper
+- conf: Introduce virDomainDefPostParseVideo helper
+- qemu: validate: Enforce compile time switch type checking for videos
+- tests: Add capabilities data for QEMU 2.11 x86_64
+- tests: Update capabilities data for QEMU 3.0.0 x86_64
+- qemu: qemuBuildHostdevCommandLine: Use a helper variable mdevsrc
+- qemu: caps: Introduce a capability for egl-headless
+- qemu: Introduce a new graphics display type 'headless'
+- qemu: caps: Add vfio-pci.display capability
+- conf: Introduce virDomainGraphicsDefHasOpenGL helper
+- conf: Replace 'error' with 'cleanup' in virDomainHostdevDefParseXMLSubsys
+- conf: Introduce new <hostdev> attribute 'display'
+- qemu: command: Enable formatting vfio-pci.display option onto cmdline
+- docs: Rephrase the mediated devices hostdev section a bit
+- conf: Introduce new video type 'none'
+- virt-xml-validate: Add schema for nwfilterbinding
+- tools: Fix typo generating adapter_wwpn field
+- src: Fix memory leak in virNWFilterBindingDispose
+
+* Mon Jul 23 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-3
+- qemu: hotplug: Do not try to add secret object for TLS if it does not exist
+- qemu: monitor: Make qemuMonitorAddObject more robust against programming errors
+- spec: Explicitly require matching libvirt-libs
+- virDomainConfNWFilterInstantiate: initialize @xml to avoid random crash
+- qemuProcessStartPRDaemonHook: Try to set NS iff domain was started with one
+- qemuDomainValidateStorageSource: Relax PR validation
+- virStoragePRDefFormat: Suppress path formatting for migratable XML
+- qemu: Wire up PR_MANAGER_STATUS_CHANGED event
+- qemu_monitor: Introduce qemuMonitorJSONGetPRManagerInfo
+- qemu: Fetch pr-helper process info on reconnect
+- qemu: Fix ATTRIBUTE_NONNULL for qemuMonitorAddObject
+- virsh.pod: Fix a command name typo in nwfilter-binding-undefine
+- docs: schema: Add missing <alias> to vsock device
+- virnetdevtap: Don't crash on !ifname in virNetDevTapInterfaceStats
+- tests: fix TLS handshake failure with TLS 1.3
+
+* Mon Jul  9 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-2
+- qemu: Add capability for the HTM pSeries feature
+- conf: Parse and format the HTM pSeries feature
+- qemu: Format the HTM pSeries feature
+- qemu: hotplug: Don't access srcPriv when it's not allocated
+- qemuDomainNestedJobAllowed: Allow QEMU_JOB_NONE
+- src: Mention DEVICE_REMOVAL_FAILED event in virDomainDetachDeviceAlias docs
+- virsh.pod: Drop --persistent for detach-device-alias
+- qemu: don't use chardev FD passing with standalone args
+- qemu: remove chardevStdioLogd param from vhostuser code path
+- qemu: consolidate parameters of qemuBuildChrChardevStr into flags
+- qemu: don't use chardev FD passing for vhostuser backend
+- qemu: fix UNIX socket chardevs operating in client mode
+- qemuDomainDeviceDefValidateNetwork: Check for range only if IP prefix set
+- spec: Temporarily drop gluster support
+
+* Tue Jul  3 2018 Jiri Denemark <jdenemar@redhat.com> - 4.5.0-1
+- Rebased to libvirt-4.5.0
+
+* Fri May 25 2018 Jiri Denemark <jdenemar@redhat.com> - 4.3.0-1
+- Rebased to libvirt-4.3.0
+
+* Wed Mar 21 2018 Daniel P. Berrangé <berrange@redhat.com> - 4.1.0-2
+- Fix systemd macro argument with line continuations (rhbz#1558648)
+
+* Mon Mar  5 2018 Daniel Berrange <berrange@redhat.com> - 4.1.0-1
+- Rebase to version 4.1.0
+
+* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Fri Jan 19 2018 Daniel P. Berrange <berrange@redhat.com> - 4.0.0-1
+- Rebase to version 4.0.0
+
+* Wed Dec 20 2017 Cole Robinson <crobinso@redhat.com> - 3.10.0-2
+- Rebuild for xen 4.10
+
+* Tue Dec  5 2017 Daniel P. Berrange <berrange@redhat.com> - 3.10.0-1
+- Rebase to version 3.10.0
+
+* Fri Nov  3 2017 Daniel P. Berrange <berrange@redhat.com> - 3.9.0-1
+- Rebase to version 3.9.0
+
+* Wed Oct  4 2017 Daniel P. Berrange <berrange@redhat.com> - 3.8.0-1
+- Rebase to version 3.8.0
+
+* Mon Sep  4 2017 Daniel P. Berrange <berrange@redhat.com> - 3.7.0-1
+- Rebase to version 3.7.0
+
+* Wed Aug  2 2017 Daniel P. Berrange <berrange@redhat.com> - 3.6.0-1
+- Rebase to version 3.6.0
+
+* Sun Jul 30 2017 Florian Weimer <fweimer@redhat.com> - 3.5.0-4
+- Rebuild with binutils fix for ppc64le (#1475636)
+
+* Tue Jul 25 2017 Daniel P. Berrange <berrange@redhat.com> - 3.5.0-3
+- Disabled RBD on i386, arm, ppc64 (rhbz #1474743)
+
+* Mon Jul 17 2017 Cole Robinson <crobinso@redhat.com> - 3.5.0-2
+- Rebuild for xen 4.9
+
+* Thu Jul  6 2017 Daniel P. Berrange <berrange@redhat.com> - 3.5.0-1
+- Rebase to version 3.5.0
+
+* Fri Jun  2 2017 Daniel P. Berrange <berrange@redhat.com> - 3.4.0-1
+- Rebase to version 3.4.0
+
+* Mon May  8 2017 Daniel P. Berrange <berrange@redhat.com> - 3.3.0-1
+- Rebase to version 3.3.0
+
+* Mon Apr  3 2017 Daniel P. Berrange <berrange@redhat.com> - 3.2.0-1
+- Rebase to version 3.2.0
+
+* Fri Mar  3 2017 Daniel P. Berrange <berrange@redhat.com> - 3.1.0-1
+- Rebase to version 3.1.0
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.0.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Thu Jan 19 2017 Daniel P. Berrange <berrange@redhat.com> - 3.0.0-1
+- Rebase to version 3.0.0