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 @@ + <smm state='on'> + <tseg unit='MiB'>48</tseg> + </smm> ++ <htm state='on'/> + </features> + ...</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 @@ + <vendor_id state='on' value='KVM Hv'/> + <frequencies state='on'/> + <reenlightenment state='on'/> ++ <tlbflush state='on'/> + </hyperv> + <kvm> + <hidden state='on'/> +@@ -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 @@ + <synic state='on'/> + <reset state='on'/> + <vendor_id state='on' value='KVM Hv'/> ++ <frequencies state='on'/> + </hyperv> + <kvm> + <hidden state='on'/> +@@ -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 @@ + <reset state='on'/> + <vendor_id state='on' value='KVM Hv'/> + <frequencies state='on'/> ++ <reenlightenment state='on'/> + </hyperv> + <kvm> + <hidden state='on'/> +@@ -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> ++<graphics type='spice' autoport='yes'/> ++<graphics type='egl-headless'/> ++ </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